Defende
|
JARINÚ SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 11/04/2005 15:54 hs
Seguinte: Tenho um label que tem 3000 twips de largura e as opcoes autosize e worwrap ativadas para dar quebra de linha. Quando eu carrego o meu texto, se ele nao couber na label gera as quebras de linhas e tal. Desafio: Como eu vou fazer para que usando Printer.Print eu consiga imprimir exatamente como esta sendo mostrado na tela? Ja tentei de tudo e ateh agora. Quem tiver uma ideia sobre o assunto, por favor me ajudem....
|
|
|
|
|
Postada em 12/04/2005 02:22 hs
o PrintForm nao serve??? Se vc quer inprimir somente o texto, e nao o label, tem muitos algoritmos na net que fazem quebra de linha... procura um... se nao me engano tem um aqui no site mesmo...
Elieser Carlos Topassi Analista de Sistemas - Desenvolvedor VB/ASP/.Net
e-mail/msn: elieser_topassi@yahoo.com.br
São José do Rio Preto,SP - Brasil _____________________________________________________
"O caminho do tolo aos seus prórios olhos lhe parece reto, mas o sábio ouve conselhos" (Pv 12:15)
|
|
|
|
Postada em 12/04/2005 09:44 hs
Blz Eliezer. O PrintForm nao server pois tem mais coisa no form pra ser impresso, tipo imagens e outras coisas. No caso de algoritimo eu ateh ja encontrei e um amigo de outro forum me passou mas o detalhe eh o seguinte: Como que o objeto Printer vai "entender" que tem de imprimir uma linha abaixo da outra? Eh isso que eu nao to conseguindo. Olha a rotina que nosso amigo Jayme do forum do MSN postou: Private Sub AjustaExtenso() On Error GoTo Erro Dim kk As String Dim ww As Byte Dim xx As Byte Dim yy As String Dim zz As Byte '''''''''''''''''''''''''''''''''''''''''''''''''''''' ' estou usando esta fonte: ' Printer.FontName = "Courier New" ' Printer.FontSize = 10 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Linha_1 = 68 ' primeira linha do extenso do cheque Linha_2 = 78 ' segunda " " " Texto_1 = "" Texto_2 = "" If Len(Texto) < Linha_1 Then ' a variavel Texto é extenso
Texto_1 = Texto + String(Linha_1 - Len(Texto), "*") Texto_2 = String(Linha_2, "*") ElseIf Len(Texto) = Linha_1 Then Texto_1 = Texto Texto_2 = String(Linha_2, "*") ElseIf Len(Texto) > Linha_1 Then If Mid(Texto, Linha_1, 1) <> " " Then xx = 1 Do While Mid(Texto, Linha_1 - xx, 1) <> " " xx = xx + 1 Loop yy = Mid(Texto, 1, Linha_1 - xx) zz = Len(yy) ww = Len(Texto) - zz kk = Mid(Texto, zz, ww + 1) Texto_1 = yy + String(Linha_1 - Len(yy) - 1, "*") Texto_2 = Trim(kk) & " " & String(Linha_2 - Len(kk), "*") Else Texto_1 = Mid(Texto, 1, Linha_1) xx = Len(Texto) - (Linha_1 + 1) Texto_2 = Trim(Mid(Texto, 70, xx)) & " " & String(Linha_2 - xx, "*") End If End If Return Erro: Screen.MousePointer = vbDefault MsgBox "Ocorreu o erro nº " & Err.Number & vbCr & vbCr & Err.Description, vbOKOnly, "Atenção" Err.Clear End Sub
Quem tiver uma ideia......
|
|
|
|
Postada em 12/04/2005 10:14 hs
Olha que interessante esta funcao postada aqui no forum pelo amigo Eric Maia Function WordWrap(ByVal Text As String, ByVal LineLength As Integer) As String Dim look As String Dim x As Long Dim Y As Long Dim eLine() As String Dim tmp As String
eLine = Split(Text, vbCrLf) If LineLength < 10 Then LineLength = 10 For Y = 0 To UBound(eLine) Do While LineLength < Len(eLine(Y)) DoEvents For x = LineLength To 1 Step -1 look = Mid(eLine(Y), x, 1) Select Case look Case " " tmp = tmp & IIf(tmp > "", vbCrLf, "") & Trim(Left(eLine(Y), x)) eLine(Y) = Right(eLine(Y), Len(eLine(Y)) - x) Exit For Case Else If x < (LineLength / 2) Then tmp = tmp & IIf(tmp > "", vbCrLf, "") & Trim(Left(eLine(Y), LineLength - 1)) & "-" eLine(Y) = Right(eLine(Y), Len(eLine(Y)) - (LineLength - 1)) Exit For End If End Select Next x Loop tmp = tmp & IIf(tmp > "", vbCrLf, "") & eLine(Y) Next Y WordWrap = tmp End Function
'Como usar Texto = WordWrap(TEXTO, Nº CARACTERES DESEJADOS) Printer.Print Texto Printer.EndDoc
Funciona perfeitamente - eh o que eu quero, soh que tem um problema que eu ja encontrei em varias funcoes - como eu vou calcular a quantidade de caracteres que eu quero dar a quebra de linha? Como eu vou saber qual a quantidade de letras e espacos que tem na "primeira linha"? Ja tentei varias formas de calcular o tamanho da letra e depois efetuar a multiplicacao mas nenhuma eh confiavel pois a letra "R" tem o tamanho diferente da letra "I". Esta bem complicado viu.....
|
|
|
|
Postada em 12/04/2005 11:49 hs
Vou te dar um conselho... Nao trabalhe com a qtde de caracteres, mas sim com a largura da linha (em mm)... é o seguinte: o objeto printer tem duas funções muito uteis para fazer caber o texto... dá uma olhada: Printer.ScaleMode = vbMillimeters 'converte a unidade para milimetros Printer.TextHeight("Elieser") 'retorna a altura da linha Printer.TextWidth("Elieser") 'retorna o comprimento A lógica é a seguinte, vc cria uma variavel string em branco... vai adicionando os caracteres um a um, e testando a cada char incluido, se excedeu o tamanho da area de impressão... qdo chegar ao tamanho certo, imprime a string na linha... Qto as quebras sem quebrar palavras, implementa um pouco mais a logica, testando somente qdo incluir um espaço... Se vc quiser um exemplo, manda um e-mail que te envio uma função que imprime texto no rodapé de nota fiscal... ela faz a quebra por palavra inteira ou por caracter... Abraços...
Elieser Carlos Topassi Analista de Sistemas - Desenvolvedor VB/ASP/.Net
e-mail/msn: elieser_topassi@yahoo.com.br
São José do Rio Preto,SP - Brasil _____________________________________________________
"O caminho do tolo aos seus prórios olhos lhe parece reto, mas o sábio ouve conselhos" (Pv 12:15)
|
|
|
|