ALIGNMENT NO OBJETO PRINTER

NEREU1301 16/12/2009 17:26:22
#329854
Boa Tarde
Num dos reláorios do meu projeto uso Objeto Printer e tá muito bom, só não to conseguindo alinhar as colunas de alguns dados que vem de uma msFlexGrid.
Por default vem alinhado a esquerda e do jeito que consegui, depois de muita pesquisa, alinha ao centro, mas eu quero alinnhar a direita.

Vem assim tá assim Quero assim
1.00 1,00 1,00
10,00 10,00 10,00
100,00 100,00 100,00
1.000,00 1.000,00 1.000,00

Na sub atual, que centraliza a coluna, faço assim:

picRel.Print Tab(0); String(195, [Ô]-[Ô])
With rsConsertos2
Do Until .EOF = True
picRel.Print Tab(3); Format(!Item, [Ô]000[Ô]);
picRel.Print Tab(10); !CodPec;
picRel.Print Tab(18); !NomePeca;
picRel.Print Tab(73); Format$(Format$(!Quant, [Ô]0.000[Ô]), [Ô]@@@@@@@@@[Ô]);
picRel.Print Tab(90); Format$(Format$(!valor, [Ô]#,##0.00[Ô]), [Ô]@@@@@@@@@[Ô]);
picRel.Print Tab(105); Format$(Format$(!TotLin, [Ô]#,##0.00[Ô]), [Ô]@@@@@@@@@[Ô]);
picRel.FontName = [Ô]Tahoma[Ô]
.MoveNext
Loop
End With
picRel.Print Tab(0); String(195, [Ô]-[Ô])


Se alguem puder me ajudar, agradeço.

Nereu

IRRV 16/12/2009 19:06:29
#329864
Nereu eu faço assim

Dim qtdColunas as integer
Dim tamanhoTexto as integer
qtdColunas = 20
tamanhoTexto = len(Texto)
Print #1 Tab(qtdColunas - tamanhoTexto) Texto;

Espero que ajude..
Att,
EDERMIR 16/12/2009 21:15:14
#329870
Resposta escolhida
Citação:

IRRV escreveu:
Nereu eu faço assim

Dim qtdColunas as integer
Dim tamanhoTexto as integer
qtdColunas = 20
tamanhoTexto = len(Texto)
Print #1 Tab(qtdColunas - tamanhoTexto) Texto;

Espero que ajude..
Att,


Um pequeno comentário sobre esta solução. Está correta se os caracteres tiverem o mesmo [Ô]tamanho[Ô].

A forma correta de obter QUALQUER tamanho é utilizar o TEXTWIDTH. Adaptando o código do IRRV:
Dim qtdColunas as integer
Dim tamanhoTexto as integer
qtdColunas = 2000 [ô]posição onde deve ficar o alinhamento A DIREITA
tamanhoTexto = picrel.textwidth(Texto) [ô]descubro o tamanho do texto na resolução da impressão
Print #1 Tab(qtdColunas - tamanhoTexto) Texto;
NEREU1301 16/12/2009 21:32:32
#329871
Boa Noite
Obrigado IRRV e Edermir.

Fiz algumas tentativas com a idéia de voces, mas retorna erro de compilação.
Com certeza não estou sabendo usar a idéia.
Por exemplo se eu quizer alinhar a coluna Quant como ficaria, porque eu antes de alinhar preciso informar que aquela coluna tá no TAB (73) ???

Nereu
EDERMIR 16/12/2009 21:36:55
#329872
O importante é saber a COLUNA onde será o alinhamento a direita.
qtdColunas = 2000 [ô]posição onde deve ficar o alinhamento A DIREITA
Wtexto = Format$(Format$(!Quant, [Ô]0.000[Ô]), [Ô]@@@@@@@@@[Ô])
tamanhoTexto = picrel.textwidth(Wtexto) [ô]descubro o tamanho do texto na resolução da impressão
Print #1 Tab(qtdColunas - tamanhoTexto); Wtexto;
EDERMIR 16/12/2009 21:42:04
#329873
Vou ser sincero, não utilizo o TAB. Utilizo o CURRENTX. Então o código ficaria assim:

qtdColunas = 2000 [ô]posição onde deve ficar o alinhamento A DIREITA
Wtexto = Format(!Quant, [Ô]0.000[Ô])
tamanhoTexto = picrel.textwidth(Wtexto) [ô]descubro o tamanho do texto na resolução da impressão
picrel.currenty = picrel.currenty + 200 [ô]pular 200 espaços entre as linhas
picrel.currentx = (qtdColunas - tamanhoTexto) [ô]coluna para iniciar a impressão do número
picrel.print Wtexto;
NEREU1301 16/12/2009 22:46:58
#329879
Edermir

Ficou do jeito que eu queria. O problema que ele perdeu o formato mas isso eu conserto.

ficou assim

With rsConsertos1
Do Until .EOF = True
picRel.Print Tab(3); Format(!Item, [Ô]000[Ô]);
picRel.Print Tab(10); !CodPeca;
picRel.Print Tab(18); !NomePeca;
qtdColunas = 5800 [ô]posição onde deve ficar o alinhamento A DIREITA
Wtexto = Format(!Quant, [Ô]0.000[Ô])
tamanhoTexto = picRel.TextWidth(Wtexto) [ô]descubro o tamanho do texto na resolução da impressão
picRel.CurrentX = (qtdColunas - tamanhoTexto) [ô]coluna para iniciar a impressão do número
picRel.Print Wtexto;
qtdColunas = 7000
Wtexto = Format(!valor, [Ô]#,##0.00[Ô])
tamanhoTexto = picRel.TextWidth(Wtexto)
picRel.CurrentX = (qtdColunas - tamanhoTexto)
picRel.Print Wtexto;
qtdColunas = 8000
Wtexto = Format(!TotLinha, [Ô]#,##0.00[Ô])
tamanhoTexto = picRel.TextWidth(Wtexto)
picRel.CurrentX = (qtdColunas - tamanhoTexto)
picRel.Print Wtexto;
picRel.FontName = [Ô]Tahoma[Ô]
.MoveNext
Loop
End With

Muito Obrigado, devo essa.

Nereu
NEREU1301 16/12/2009 22:58:24
#329880
arrumei o problema do formato

essa linha
picRel.Print Wtexto;

fica assim
picRel.Print Format(!TotLinha, [Ô]###0.00[Ô]);

agora ficou 10, blz

muito obrigado

Nereu


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