CENTRALIZAR IMPRESSAO

USUARIO.EXCLUIDOS 10/09/2007 11:23:22
#234866
AMIGO gostaria de saber como eu faço para centralizar a impressão.
eu uso o objeto printer para imprimir. e eu estou imprimindo um conteudo do listview:
eu faço o seguinte:

Public Sub PrintListView(LV As ListView, Lines%)
Dim i%, LVWidth%, NewTab%, j%
Dim Lista As ListItem
Dim ContaLinha%
'orientação do papel na paisagem
'para imprimir em modo normal retire o vbprorlandscape

'Printer.Orientation = vbPRORLandscape
Printer.Font = "Arial"
Printer.FontSize = "8"

LVWidth = 0
For i = 1 To LV.ColumnHeaders.Count
LVWidth = LVWidth + LV.ColumnHeaders(i).Width
Next
NewTab = 0


'Imprime uma linha de separaçao
Printer.Print
imprime_linha
Printer.Print
'se o nº de linhas do ListView for menor que o de linhas_
'definas para imprimir for menor que o conteúdo, então imprime_
'o total de linhas do relatório.
If Lines > LV.ListItems.Count And Lines <> 0 Then
ContaLinha = Lines
Else
ContaLinha = LV.ListItems.Count
End If
'Imprime os itens e subitens
For i = 1 To ContaLinha
NewTab = 0
Set Lista = LV.ListItems(i)
Printer.Print Lista.Text;
For j = 1 To LV.ColumnHeaders.Count - 1
NewTab = NewTab + CInt(LV.ColumnHeaders(j).Width * Printer.ScaleWidth / LVWidth)
Printer.CurrentX = NewTab
Printer.Print Lista.SubItems(j);
Next

Printer.Print
Next


Printer.EndDoc
End Sub


O QUE ACONTECE QUANDO ELE IMPRIME ELE ALINHA TUDO A ESQUERDA E EU PRECISO QUE ELE ALINHE OS CAMPOS A DIREITA.
MJAC 10/09/2007 11:48:04
#234873
Resposta escolhida
você precisa que ele calcule a diferença entre o tamanho da palavra e o tamanho do papel e preencha com espaço antes.
Por exemplo criamos essa sub rotina:
Citação:

Public Sub ImprimeDireita(Palavra As String)
Dim nEsp As Long
nEsp = (Printer.ScaleWidth - Printer.TextWidth(Palavra)) \ Printer.TextWidth(" ")
Printer.Print Space(nEsp) & Palavra
End Sub



Exemplo de utilização: imprimir palavra teste
Citação:

ImprimeDireita "teste"



Para centralizar seria uma sub rotina assim:
Citação:

Public Sub ImprimeCentralizado(Palavra As String)
Dim nEsp As Long
nEsp = (Printer.ScaleWidth - Printer.TextWidth(Palavra)) \ Printer.TextWidth(" ")
Printer.Print Space(nEsp \ 2) & Palavra
End Sub





USUARIO.EXCLUIDOS 10/09/2007 11:51:38
#234875
Segue:

Para realizar o alinhamento central temos que determinar o espaço disponível e colocar igual quantidade de espaços em ambos os lados do texto a ser impresso. Para isto usamos a propriedade CurrentX e o método TextWidth. A rotina completa é a seguinte;


Private Sub AlinhaCentro(objSaida As Object, LMarg, TMarg, RgWid, RgHgt _
As Integer, texto As String)
Dim txMarg As Integer
txMarg = (RgWid - objSaida.TextWidth(InptStr)) / 2
If txMarg < 0 Then txMarg = 0
objSaida.CurrentX = LMarg + txMarg
objsaida.CurrentY = TMarg
objSaida.Print texto
End Sub


Pode obter mais informações no:

http://macoratti.net/printer.htm
USUARIO.EXCLUIDOS 10/09/2007 13:49:59
#234892
desculpe mais não entendi onde eu incluio esta rotina.
USUARIO.EXCLUIDOS 10/09/2007 14:51:43
#234904
onde vc precisar imprimeir centralizado vc chama:
AlinhaCentro 'Aqui vc coloca os parametros
USUARIO.EXCLUIDOS 10/09/2007 15:21:29
#234912
Gente como estou com a msm duvida do Guigor ... irei postar aki msm tah?

o meu problema é bem parecido com o dele... estou imprimindo eu uma folha A4, mas pra centralizar todos os textos eu não consigo ... eu costumo usar CurrentX e CurrentY... mas como o usuario q irá decidir o q terá nos textbox eu não sei o q fazer....


Private Sub cmdImprimir_Click()
Dim Mensagem As String

Mensagem = MsgBox("Tem certeza que deseja imprimir o registro atual?", vbYesNo, "Aviso")
If Mensagem = vbYes Then
Printer.FontName = "Arial"
Printer.FontSize = 14
Printer.FontBold = True
Printer.ForeColor = QBColor(0)
Printer.Orientation = vbPRORPortrait
Printer.PaperSize = vbPRPSA4
Printer.PrintQuality = vbPRPQMedium

Printer.Print Label1.Caption; Spc(10); txtProduto.Text
Printer.Print
Printer.Print Label2.Caption; Spc(10); txtPassada1.Text
Printer.Print
Printer.Print Label3.Caption; Spc(10); txtFormula1.Text
Printer.Print
Printer.Print Label4.Caption; Spc(10); txtPorcentagem1.Text
Printer.Print
Printer.Print Label5.Caption; Spc(10); txtPassada2.Text
Printer.Print
Printer.Print Label6.Caption; Spc(10); txtFormula2.Text
Printer.Print
Printer.Print Label7.Caption; Spc(10); txtPorcentagem2.Text
Printer.Print
Printer.Print Label8.Caption; Spc(10); txtPassada3.Text
Printer.Print
Printer.Print Label9.Caption; Spc(10); txtFormula3.Text
Printer.Print
Printer.Print Label10.Caption; Spc(10); txtPorcentagem3.Text
Printer.Print
Printer.Print Label11.Caption; Spc(10); txtPassada4.Text
Printer.Print
Printer.Print Label12.Caption; Spc(10); txtFormula4.Text
Printer.Print
Printer.Print Label13.Caption; Spc(10); txtPorcentagem4.Text
Printer.EndDoc
End If
End Sub



Obrigado gente...
USUARIO.EXCLUIDOS 10/09/2007 16:26:57
#234928
tenta isso aqui:

Dim srtPassada1 As String * 10 ' variavél para alinha o texto a direita
Printer.Print Label2.Caption; Spc(10); txtPassada1.Text
RSet srtPassada1 = Format(("txtpassada1.text"), "#,##0.00")

Tópico encerrado , respostas não são mais permitidas