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

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  printer.print
andre
DIVINÓPOLIS
MG - BRASIL
ENUNCIADA !
Postada em 11/07/2006 13:35 hs            
Estou fazendo um relatorio no metodo printer.print, mas estou tendo muitos problemas:
 
1º => As entrelinhas estão enormes, a impressora está saltando uma linha entre uma impressão e outra
2º => A impressora não está imprimindo até o fim da folha (está sobrando 1 cm) Preciso que ela deiche o minimo possivel (2mm). Obs: já aumentei o eixo X; já coloquei o tamanho do papel; já aumentei o left.
3º => Como faço para a impressão ficar alinhada à direita na hora da impressão?
4º => Como faço para imprimir no rodapé o nº da folha (# de #)?
5º => Tem como abrir as configurações da impressão antes de imprimir, tipo o word faz antes da impressão, para que eu possa configurar e escolher quais folhas eu quero imprimir?
Se alguém puder me ajudar. Grato
   
aristides
não registrado
Postada em 11/07/2006 13:59 hs   
     
Daniel
Pontos: 2843
SÃO PAULO
SP - BRASIL
Postada em 11/07/2006 14:09 hs            
Vou responder o que posso:
1)
O posicionamento da impressão voce faz:
for t=1 to 10
 Printer.CurrentY = t*0,7 --> 0,7 cm de espaço entre as linhas
 Printer.CurrentX = 0,5 ---> 0,5 cm a partir da esquerda da pagina
 Printer.print "Texto"
next t
a variação entre uma linha e outra dependerá do valor que estou multiplicando pelo t (0,7)
 
2)
Se voce estiver usando windows xp deverá configurar o papel (se for de tamanho especial) em impressoras --> propriedades do servidor
3)
se for campo numérico voce deverá usar o FORMAT para alinhar a direita ou tera de calcular a posição a partir do tamanho do texto a ser impresso exemplo:
 Printer.CurrentX = 15 - (Rt_Label_Impr.Width / 567)
nesse exemplo estou imprimindo na posição 15 cm menos o tamanho do texto a ser impresso (Rt_Label_Impr.Caption)
4)
no rodapé voce terá que fazer um contador de página pra poder imprimir o numero da página atual
 
a sua 5 pergunta a única alternativa é redefinir a impressora padrão, na função que paço abaixo preciso ter uma base onde defino o relatório e a impressora e será passado p/função o nome do relatório , que será pesquisada no painel de controle do windows se achar ele irá assumir essa para impressão:
Function F_Setar_Impres(Nome_Relatorio As String) As Boolean
'seta a impressora especifica para o objeto printer
    On Error GoTo Err_F_Setar_Impres
    Dim X As Printer, T_Teste As String
    Dim Rc_Temp As Recordset, T_Cont As Long
   
    Set Rc_Temp = Base_Termin.OpenRecordset("SELECT IR.* FROM Impressora_Rel AS IR WHERE (((IR.Relatorio)='" & Nome_Relatorio & "'));")
    If Rc_Temp.RecordCount = 0 Then
        T_Teste = Printer.DeviceName
    Else
        For Each X In Printers
            If X.DeviceName = Rc_Temp("Impressora") Then
                T_Cont = 1
                Do Until Printer.DeviceName = Rc_Temp("Impressora")
                    If T_Cont > 10 Then GoTo Err_F_Setar_Impres
                    Set Printer = X
                    T_Cont = T_Cont + 1
                Loop
                F_Setar_Impres = True
                Exit Function
            End If
        Next
    End If
    G_Mens "Não Existe uma impressora especifica para este Relatorio, usando a impressora Padrão!", MEN_INFORMA
    F_Setar_Impres = True
    Exit Function
Err_F_Setar_Impres:
    If Err = 484 Then
        G_Mens "Não existe impressora instalado em seu computador", MEN_INFORMA
    Else
        G_Mens "Não foi possivel encontrar a impressora para imprimir", MEN_INFORMA
    End If
End Function

 
 

dsmn
     
Sandro
não registrado
Postada em 11/07/2006 14:13 hs   
Olá,
 
1. O espeço entre linhas é definido automaticamente pelo driver de impressão de acordo com o tamanho da fonte. Porém, se você diz que a impressora está saltando uma linha, pode ser problema com o tamanho do texto que você está tentando imprimir. Tente alterar não apenas o tamanho da fonte, mas também a propriedade PaperSize e o ScaleWidth da página. Cuidado com concatenação de textos em impressão. Se você tem uma string1 e uma string2 e precisa imprimí-las em uma única linha, mas deseja usar doi comandos Print, você obrigatoriamente precisa usar um ponto-e-vírgula no final da primeira intrução:
 
Printer.Print String1;
Printer.Print String2
 
Outra coisa, não use Chr$(13) no final de uma instrução Print, pois isso faz com que a impressora forçe um salto de linha (não são todas as impressoras que respondem a isso dessa forma, mas por via das dúvidas, não faça);
 
2. Tente usar um tamanho personalizado de papel, um pouco maior que o real para "enganar" o driver de impressão e o gerenciador do VB. Lembro que no Word, em alguns casos, para imprimir em A4 sem cortar a impressão e manter uma margem reduzida, eu precisava informar que o papael tinha 30,4 cm e não 29,4 como é o padrão.
 
3. Para alinha um número ou um texto qualquer à direita como métod oPrint, basta usar uma das funções mais velhas do BASIC (isso vem da época que o BASIC era apenas interpretado...bons tempos aqueles em que o computador obedecia a gente...), a instrução RSet:
 
    Dim Mascara As String
   
    Mascara = Space(14)        '<--Você pode alterar a mascara para quanto precisar.
    RSet Mascara = "100,01"
   
    Printer.Print Tab(50); Mascara
 
Isso fará com que a impressão saia alinhada à direita em uma string de 14 caracteres que irá começar na coluna 40 da folha. É claro que você pode alterar tanto o tamanho da mascara quanto a posição do Tab;
 
4. Para imprimir no rodapé o que você está querendo, você terá que controlar em uma variável não apenas o número da página, mas também terá que saber de antemão quantas páginas o seu relatório irá ter. Você pode calcular se souber quantas linhas cabem em cada página e quantas linhas você terá que imprimir (não esqueça de contar as linhas em branco, como linhas a serem impressas!);
 
5. Para configurar a impressão antes de imprimir, adicione ao seu projeto a CommonDialog control e use o método ShowPrint.
 
Espero ter ajudado.
 
um abraço,
Sandro.
     
Maha
SÃO PAULO
SP - BRASIL
Postada em 11/07/2006 17:34 hs            
Coloca o código ai, assim fica mais fácil.
 

Saúde e Paz, o resto... trabalhando vem!!!

"Se um dia a vida lhe der as costas, passe a mão na bunda dela!!!"

     
andre
DIVINÓPOLIS
MG - BRASIL
Postada em 12/07/2006 10:54 hs            
    Dim bancodados As Database
    Dim produto As Recordset
    Dim linha As Integer
   
    linha = "1"
    Set bancodados = OpenDatabase("D:Meus DocumentosOutrosVisual BasicTabelasMatriz.mdb")
    Set produto = bancodados.OpenRecordset("Produto", dbOpenTable)
    produto.Index = "DESCR"
    Printer.FontName = "Arial"
    Printer.FontSize = "9,5"
    Printer.PaperSize = 1 ' Letter, 8 1/2 x 11 in.
    
    Do While Not produto.EOF
    If linha = "1" Then
    Cabeçalho
    End If
    Printer.CurrentX = 500
    
    Printer.Print Tab(1.5); Left(produto("COD PROD"), 12); Tab(19); Left(produto("UND"), 2); Tab(24); Left(produto("DESCR"), 26); Tab(70); Left(produto("APLICAC"), 26); Tab(116); Left(produto("PRECO VEND"), 9); Tab(128); Left(produto("FABRICANTE"), 15)
    linha = linha + 1
    produto.MoveNext
    If linha >= 50 Then
    Printer.NewPage
    linha = 1
    End If
   
    Loop
    Printer.EndDoc
    produto.Close
    bancodados.Close
     
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

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

HTML DESLIGADO

     
 VOLTAR

  



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