IMPRIMIR TEXTBOX MULTILINE
Bom dia, pessoal.
Gostaria de imprimir o conteúdo de uma TextBox (TxtObservacoes) que é setada como MutiLine, lendo linha a linha e jogando o conteúdo de cada linha no local especÃfico do relatório.
Fiz dessa maneira, porém não deu certo:
PosicaoDaLinha=220
For Each Linha As String In Documentos.TxtObservacoes.Lines
e.Graphics.DrawString(Linha, New Font([Ô]Microsoft Sans Serif[Ô], 9, FontStyle.Bold), Brushes.Black, 146, PosicaoDaLinha + 20)
PosicaoDaLinha=PosicaoDaLinha+20
Next
Imprime apenas a primeira linha.
Gostaria de imprimir o conteúdo de uma TextBox (TxtObservacoes) que é setada como MutiLine, lendo linha a linha e jogando o conteúdo de cada linha no local especÃfico do relatório.
Fiz dessa maneira, porém não deu certo:
PosicaoDaLinha=220
For Each Linha As String In Documentos.TxtObservacoes.Lines
e.Graphics.DrawString(Linha, New Font([Ô]Microsoft Sans Serif[Ô], 9, FontStyle.Bold), Brushes.Black, 146, PosicaoDaLinha + 20)
PosicaoDaLinha=PosicaoDaLinha+20
Next
Imprime apenas a primeira linha.
Ninguém ???
Deixa eu ver se entendi, seu texbox tem várias linhas e cada linha vc joga em um lugar diferente no relatorio?
é um campo de observações. Preciso imprimir do mesmo jeito que está na TextBox. A primeira linha, depois a segunda e assim por diante até que termine todo o texto digitado. é como se fosse fazer um For...Next até acabar o texto digitado, pois eu não sei quantas linhas terão sido digitadas na TextBox, pode ser que tenha 1 linha e pode ser que tenha várias.
No VB6 eu até tinha uma função que fazia isso, porém não encontrei em minhas fontes antigas.
Até mais.
No VB6 eu até tinha uma função que fazia isso, porém não encontrei em minhas fontes antigas.
Até mais.
Bom, veja se assim funciona.
PosicaoDaLinha=220
For Each Linha As String In Documentos.TxtObservacoes.Lines
e.Graphics.DrawString(Linha, New Font([Ô]Microsoft Sans Serif[Ô], 9, FontStyle.Bold), Brushes.Black, 146, PosicaoDaLinha + 20)
PosicaoDaLinha +=20
Next
Altair, é assim que funciona: o usuário vai digitando a observação e se no final da linha ele teclar ENTER para passar para a linha de baixo da TextBox, eu consigo pegar a linha, porém se ele for digitando tudo sem dar ENTER, na hora de imprimir, vai imprimir como se fosse uma única linha. Por isso, teria que ter uma funcão que pegasse linha a linha da TextBox e aÃ, sim eu jogaria no local certo do relatório. Será que é muito difÃcil?
Até mais.
Até mais.
Bom dia,
Agora sim acho que entendi, todas as linhas, não importa se houve quebra de linha elas tem que sempre estar no mesmo tamanho.
Vou ver o que dá para fazer. E já posto o resultado.
Agora sim acho que entendi, todas as linhas, não importa se houve quebra de linha elas tem que sempre estar no mesmo tamanho.
Vou ver o que dá para fazer. E já posto o resultado.
Valeu, amigo, aguardo.
Até mais.
Até mais.
Olha, não sei se resolve o seu problema, mas no exemplo fiz assim: ele verifica quantos caracteres digitados, no exemplo são 30, a cada 30 caracteres ele ele da um tipo um enter assim adicionando uma nova linha. Testa ai e vê se resolve o seu caso.
Altair, muito obrigado pela paciência, porém dessa forma não fica muito correto, pois se estiver no meio da digitação de uma palavra, ocorre o ENTER e a palavra fica separada incorretamente. Eu encontrei a função do VB6 que eu utilizava (não é minha, foi retirada de algum lugar da Net):
[ô] função PegaLinha da TextBox
Private Function PegaLinhaContador(txt) As Long
PegaLinhaContador = SendMessageAsLong(txt.hWnd, EM_GETLINECOUNT, 0, 0)
End Function
[ô]// preenche o buffer com uma linha de texto definida em LinhaNumero
[ô]// a primeira linha começa no zero
Private Function PegaLinha(txt As TextBox, LinhaNumero As Long) As String
[ô]// caracteres por linha
Const MAX_CHAR_PER_LINE As Long = 69
Dim ByteLo As Integer
Dim ByteHi As Integer
Dim rtn As Long
Dim Buffer As String
ByteLo = MAX_CHAR_PER_LINE And (255)
ByteHi = Int(MAX_CHAR_PER_LINE / 256)
Buffer = Chr$(ByteLo) + Chr$(ByteHi) + Space$(MAX_CHAR_PER_LINE - 2)
rtn = SendMessageAsString(txt.hWnd, EM_GETLINE, LinhaNumero, Buffer)
PegaLinha = Left$(Buffer, rtn)
End Function
Para imprimir fazia assim:
n = PegaLinhaContador(TxtObservacoes)
For i = 1 To n
Print #1, Tab(2); PegaLinha(TxtObservacoes, i - 1)
Next
Não sei se, de repente, dá para converter o código para o VB.Net. Eu, pela minha pouca experiência, não consigo fazer isso.
Se alguém souber, ou me der outra forma de fazer o que eu preciso, agradeço muito.
Até mais.
[ô] função PegaLinha da TextBox
Private Function PegaLinhaContador(txt) As Long
PegaLinhaContador = SendMessageAsLong(txt.hWnd, EM_GETLINECOUNT, 0, 0)
End Function
[ô]// preenche o buffer com uma linha de texto definida em LinhaNumero
[ô]// a primeira linha começa no zero
Private Function PegaLinha(txt As TextBox, LinhaNumero As Long) As String
[ô]// caracteres por linha
Const MAX_CHAR_PER_LINE As Long = 69
Dim ByteLo As Integer
Dim ByteHi As Integer
Dim rtn As Long
Dim Buffer As String
ByteLo = MAX_CHAR_PER_LINE And (255)
ByteHi = Int(MAX_CHAR_PER_LINE / 256)
Buffer = Chr$(ByteLo) + Chr$(ByteHi) + Space$(MAX_CHAR_PER_LINE - 2)
rtn = SendMessageAsString(txt.hWnd, EM_GETLINE, LinhaNumero, Buffer)
PegaLinha = Left$(Buffer, rtn)
End Function
Para imprimir fazia assim:
n = PegaLinhaContador(TxtObservacoes)
For i = 1 To n
Print #1, Tab(2); PegaLinha(TxtObservacoes, i - 1)
Next
Não sei se, de repente, dá para converter o código para o VB.Net. Eu, pela minha pouca experiência, não consigo fazer isso.
Se alguém souber, ou me der outra forma de fazer o que eu preciso, agradeço muito.
Até mais.
Bom amigo, deixa ai que quem sabe alquem pode lhe ajudar.
Tópico encerrado , respostas não são mais permitidas