IMPRIMIR USERCONTROL
Pessoal, boa tarde a todos!
Nesse meu formulário, eu estou mostrando na esquerda, um RichTextBox com a letra da música cifrada (com as notas de violão).
Aà eu fiz uma rotina para pegar as notas que estão sobre a letra da música e mostrar o acorde do violão através de um UserControl à direita da tela.
Agora, eu preciso incluir uma rotina que imprime essa letra da música cifrada e ao final, preciso mostrar os acordes.
Como eu faço para imprimir esses UserControls? Será que é possÃvel?
Antes que alguém diga: depende de como você está fazendo.... vou postar a parte do código que faz esse trabalho todo:
Nesse meu formulário, eu estou mostrando na esquerda, um RichTextBox com a letra da música cifrada (com as notas de violão).
Aà eu fiz uma rotina para pegar as notas que estão sobre a letra da música e mostrar o acorde do violão através de um UserControl à direita da tela.
Agora, eu preciso incluir uma rotina que imprime essa letra da música cifrada e ao final, preciso mostrar os acordes.
Como eu faço para imprimir esses UserControls? Será que é possÃvel?
Antes que alguém diga: depende de como você está fazendo.... vou postar a parte do código que faz esse trabalho todo:
// aqui eu crio uma List<> que busca a musica na tabela [Ô]Musica[Ô]
// usando o Inner Join com a tabela Indice para pegar o nome da musica e o nome do artista
List<Musica> _lista = new List<Musica>(new Musica().Get_All(
[Ô]Select m.*, i.NomeMusica, i.NomeArtista [Ô] +
[Ô]From Musica m [Ô] +
[Ô]Inner Join Indice i On i.IdMusica = m.IdMusica [Ô] +
[Ô]Where m.IdMusica = [ô][Ô] + lblIdMusica.Text + [Ô][ô][Ô] +
[Ô]Order By m.Linha[Ô]));
// aqui eu crio um array SortedSet do tipo string
var todas_notas = new SortedSet<string>();
// guarda a posicao da linha inicial
int n = 3;
// percorre a List<> para mostrar o resultado
foreach (var item in _lista)
{
rtbResultado.AppendText(item.Texto + [Ô]
[Ô]);
string linha = rtbResultado.Lines[n];
rtbResultado.Select(rtbResultado.GetFirstCharIndexFromLine(n), linha.Length);
// se for encontrado a palavra [Ô]Acorde[Ô] na linha,
// vai adicionar o valor dos acordes na array
// e mostrar na cor laranja
if (item.Tipo == [Ô]Acorde[Ô])
{
string s_linha = linha;
string[] notas = s_linha.Split([ô] [ô]);
foreach (string nota in notas)
{
todas_notas.Add(nota);
}
rtbResultado.SelectionColor = Color.OrangeRed;
}
// se for encontrado as palavras [Ô]Tom[Ô] ou [Ô]Intro[Ô] na linha,
// vai adicionar o valor os acordes na array
else if (item.Tipo == [Ô]Tom[Ô] || item.Tipo == [Ô]Intro[Ô])
{
string s_linha = linha;
string[] notas = s_linha.Split([ô] [ô]);
foreach (string nota in notas)
{
todas_notas.Add(nota);
}
// Start position
int start = (rtbResultado.GetFirstCharIndexFromLine(n) + linha.LastIndexOf([Ô]:[Ô]) + 1);
// Length
int length = linha.Substring(linha.LastIndexOf([Ô]:[Ô]), (linha.Length - (linha.LastIndexOf([Ô]:[Ô])))).Length;
// Make the selection
rtbResultado.SelectionStart = start;
rtbResultado.SelectionLength = length;
// Change the colour
rtbResultado.SelectionColor = Color.OrangeRed;
}
else if (item.Tipo == [Ô]Espaco[Ô] || item.Tipo == [Ô]Letra[Ô])
{
rtbResultado.SelectionColor = Color.Black;
}
n++;
}
// deixa o RichTextBox sem seleção nenhuma
rtbResultado.DeselectAll();
// retira os valores duplicados da array
todas_notas.Distinct().ToList();
// mostrar os acordes
foreach (var item in todas_notas)
{
List<Acorde> _acordes = new List<Acorde>(new Acorde().Get_All(
[Ô]Select * From Acorde Where NomeAcorde = [ô][Ô] + item.ToString() + [Ô][ô][Ô]
));
if (_acordes.Count != 0)
{
nome_da_nota = item.ToString();
MostrarAcorde();
}
}
rtbResultado.SelectionStart = 0;
this.ActiveControl = lblIdMusica;
private void MostrarAcorde()
{
// busca o acorde na tabela [Ô]Acorde[Ô]
List<Acorde> _acordes = new List<Acorde>(new Acorde().Get_All(
[Ô]Select * From Acorde Where NomeAcorde = [ô][Ô] + nome_da_nota + [Ô][ô][Ô]));
// mostra todos os acordes da música
foreach (var item in _acordes)
{
Cifra _cifra = new Cifra();
_cifra.lblNomeAcorde.Text = item.NomeAcorde;
if (contagem == 1)
_cifra.Location = new Point(670, 10);
else if (contagem == 2)
_cifra.Location = new Point(775, 10);
else if (contagem == 3)
_cifra.Location = new Point(880, 10);
else if (contagem == 4)
_cifra.Location = new Point(985, 10);
else if (contagem == 5)
_cifra.Location = new Point(670, 180);
else if (contagem == 6)
_cifra.Location = new Point(775, 180);
else if (contagem == 7)
_cifra.Location = new Point(880, 180);
else if (contagem == 8)
_cifra.Location = new Point(985, 180);
else if (contagem == 9)
_cifra.Location = new Point(670, 350);
else if (contagem == 10)
_cifra.Location = new Point(775, 350);
else if (contagem == 11)
_cifra.Location = new Point(880, 350);
else if (contagem == 12)
_cifra.Location = new Point(985, 350);
else if (contagem == 13)
_cifra.Location = new Point(670, 520);
else if (contagem == 14)
_cifra.Location = new Point(775, 520);
else if (contagem == 15)
_cifra.Location = new Point(880, 520);
else if (contagem == 16)
_cifra.Location = new Point(985, 520);
this.Controls.Add(_cifra);
contagem ++;
}
}
Veja bem, você mão imprime o UserControl em si. Você gera um relatório(report) daquilo que quer imprimir. Não sei qual seu conhecimento quanto à isso, mas é perfeitamente possÃvel usar o Crystal para isso. Eu, no seu lugar, usaria HTML. Geraria o código HTML, passaria para um objeto WebBrowser, de onde faria a impressão. Ele já disponibiliza inclusive um [Ô]Preview[Ô] com o método [Ô]ShowPrintPreviewDialog[Ô]. E essa é a razão de eu simplesmente não entender porque ainda tem tanta gente que usa Crystal. é assim que tenho feito todos os meus relatórios, ficam muito mais simples, dinâmicos e bonitos, além de ser possÃvel o envio por e-mail, publicação direta em qualquer ftp ou http, podem fazer uso de recursos externos, inclusive com AJAX ou qualquer outra coisa suportada em HTML.
Obrigado pela explicação Kerplunk, mas eu consegui como eu queria de outra forma, estou usando uma função que captura a imagem da tela (no meu caso, capturo somente as imagens dos acordes), aÃ, gero o arquivo em PDF da letra da música com as cifras e quando acabar a letra, eu imprimo a imagem dos acordes capturada.
Funcionou perfeitamente!
Funcionou perfeitamente!
Tópico encerrado , respostas não são mais permitidas