USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  desafio usando o objeto Printer
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....
   
Elieser Topassi
Pontos: 2843 Pontos: 2843
SÃO JOSÉ DO RIO PRETO
SP - BRASIL
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
_____________________________________________________
Emoções "O caminho do tolo aos seus prórios olhos lhe parece reto, mas o sábio ouve conselhos" (Pv 12:15)

     
Defende
JARINÚ
SP - BRASIL
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......
     
Defende
JARINÚ
SP - BRASIL
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.....
     
Elieser Topassi
Pontos: 2843 Pontos: 2843
SÃO JOSÉ DO RIO PRETO
SP - BRASIL
ENUNCIADA !
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
_____________________________________________________
Emoções "O caminho do tolo aos seus prórios olhos lhe parece reto, mas o sábio ouve conselhos" (Pv 12:15)

   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2025   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página