Array
(
)

Impressão direta

Pro-luck
   - 02 fev 2006

Tenho uma sequência de 10 registros com 8 campos cada um, armazenados numa tabela e quero saber o q devo fazer para mandar um a um, (registro a registro) direto para a impressora.
Tenho dúvidas quanto a questão de mandar dos dados dos campos para o papel (em termos de localização - linha x coluna -, tenho dúvidas sobre como pedir uma mudança de linha...
Acredito que não seja difícil, mas eu ainda não sei... Infelizmente sou totalmente do QuickReport e mais infelizmente ainda, não estou conseguindo resolver com ele...

Certo da atenção de todos antecipadamente agradeço...
Té+.
(Utilizo Delphi 5 - Paradox - SQL)


Aroldo Zanela
   - 02 fev 2006

Colega,

Se for ´coisa´ simples, veja (do help):

#Código


var
MyFile: TextFile;
begin
AssignPrn(MyFile);
Rewrite(MyFile);
Writeln(MyFile, ´Print this text´);
System.CloseFile(MyFile);
end;


Se precisar de maior sofisticação, veja o FortesReport que é semelhante ao QuickReport e possui filtro para impressão em modo matricial.


Pro-luck
   - 02 fev 2006

Minha dúvida é quanto ao posicionamento dos dados... onde cada um deverá aparecer...

Eu lembro que no Clipper eu escolhia a linha e a coluna, mas não sei como faço isso no Delphi...

Obrigado pela urgência Aroldo Zanela... :wink:


Aroldo Zanela
   - 03 fev 2006

Colega,

No caso de impressão direta com WriteLn, você deverá usar fontes mono-espaçadas (Courier New, FixedSys, Terminal, etc) e poderá efetuar o posicionamento por meio da função Format.
Uma outra solução e ´mapear´ um objeto da classe TStringList (Matriz) com n Linhas X n Colunas e preencher nas coordenadas.
Mas a forma mais simples mesmo é utilizando o Canvas. Existem vários tópicos detalhando a solução, entretanto, passa pelo GDI do windows.


Aroldo Zanela
   - 03 fev 2006

Colega,

Ainda não parei para testar este [url=http://forum.clubedelphi.net/viewtopic.php?t=72997&highlight=]componente[/url] do Vinícius (vinicius2k), mas acredito que seja uma solução adequada para a sua necessidade.


Eniorm
   - 03 fev 2006

amigos, pra que complicar ehehehe?

se o cara quiser fazer manual pra aprender, blza!

do contrario, pra impressão direta existe o RDPrint que é muito bom.... mas é pago e naum vem com sources

AGORA, se o cara quiser um free+sources, o lance é o EXCELENTE componente VDOPrint, feito pelo amigo Vinicius2k daqui do forum, o componente está na versão 3 e agora possui um Preview..

VDOPrint: www.devres.cjb.net

abraço


Pro-luck
   - 11 fev 2006

Caro colega,


Será que posso contar com o teu auxílio e esperar que poste um exemplo de como utilizar o WriteLn?


Acredito q seja exatamente isto q estou precisando.
Fontes mono-espaçadas, mais trabalhoso mesmo...

Antecipadamente agradeço...


Edilcimar
   - 11 fev 2006

A primeira resposta do Zanela dá a informação desejada, caso queira colocar mais de uma ´coisa´ na mesma linha, que que fazer manualmente, tipo
var
MyFile: TextFile;
begin
AssignPrn(MyFile);
Rewrite(MyFile);
Writeln(MyFile, ´Print this text mais alguma coisa´);
System.CloseFile(MyFile);
end;
o mais alguma coisa pode ser substituido por uma variável, e ficaria
Writeln(MyFile, ´Print this text´ +´ ´+variaveltexto´);


Pro-luck
   - 11 fev 2006

Caro colega,

O que eu não estou sabendo fazer é controlar o posicionamente. Como vc falou, controlo com uso do Format...
Vc pode dizer-me como? Ou até mesmo fazer o tal mapeamento...
Peço que não me tome por um cara chato... Só estou querendo aprender e para tanto conto com a ajuda de todos do Fórum....

Antecipadamente agradeço...


Vinicius2k
   - 11 fev 2006

Colega,

Você pode criar um ´buffer´ da linha antes de escrevê-la, propriamente.
Eu sempre preferi utilizar este recurso aliado ao Format, para escrever arquivos texto que, no seu caso, é o mesmo processo.

Um exemplo simples seria:
#Código

var
SBuf: string;

procedure WriteToBuf(ACol: Integer; S: string);
var
I: Integer;
begin
for I := 0 to Pred(Length(S)) do
SBuf[ACol+I] := S[Succ(I)];
end;

procedure SuaProcedure;
const
Len = 255;
var
// ...
Txt1, Txt2, Txt3, Txt4: string;
Int1, Int2: Integer;
Doub: Double;
begin
// ...
SBuf := StringOfChar(32, Len);
{ **** }
Txt1 := ´Texto 1´;
Txt2 := ´Texto 2´;
Txt3 := ´Texto 3´;
Txt4 := ´Texto 4´;
Int1 := 12345;
Int2 := 67890;
Doub := 1234567.890;
{ **** }
WriteToBuf(001, Txt1);
WriteToBuf(011, Txt2);
WriteToBuf(021, Format(´¬7.7d´, [Int1]));
WriteToBuf(031, Txt3);
WriteToBuf(041, Txt4);
WriteToBuf(051, Format(´¬7.7d´, [Int2]));
WriteToBuf(071, FormatFloat(´,0.00´, Doub));
{ **** }
// Só então o "buffer" é escrito e reiniciado.
Writeln(Arquivo, SBuf);
SBuf := StringOfChar(32, Len);
{ **** }
// ...
end;


Em tempo, obrigado aos colegas pela indicação do VDOPrint e, principalmente, muito bom ´vê-lo´ por aqui novamente AZ ;)


Kitsystem
   - 12 fev 2006

Sempre trabalhei com apenas CloseFile(MyFile);

Qual a diferença real de colocar System.CloseFile(MyFile); ?


Chmelo
   - 12 fev 2006

Caro amigo,

O componente VDOPrint do nosso amigo Vinicius2K e muito bom , eu ja uso ele ja faz um tempinho , e so voce verificar o exemplo que vem junto e voce vera que e parecido com o antigo clipper na hora de voce posicionar a linha e coluna no formulario, e agora com a nova versao deve estar melhor ainda , pois agora com preview deve ter ficado show de bola..

baixe a versao e faca o teste...

ate +

Carlos Melo


Kitsystem
   - 13 fev 2006

CHMELO,

Minha pergunta é outra coisa, não estou procurando saber de componente de impressao

Quero saber qual a diferenca de usar

System.CloseFile(MyFile);

e apenas

CloseFile(MyFile);


Dopi
   - 13 fev 2006

Vinicius,

Algumas outras Units (não lembro de qual versão do Delphi) tb possuem uma função CloseFile... chamando System.CloseFile() temos certeza que será executada a função CloseFile da Unit System


Pro-luck
   - 13 fev 2006

Agradecimentos aos colegas do Fórum que contribuíram com o meu aprendizado quanto ao comando ´WriteLn´. Confesso que ainda não o domino completamente, mas felizmente consegui resolver o meu problema de maneira super satisfatória. Em especial, agradecimentos ao Zanela, ao Edilcimar e Vinicius2K, que sempre se mostraram pacientes e participativos.


Valeu colegas,

Ah, se tiverem mais algumas dicas para me enviar, que possa me ajudar a conseguir impressões diretas e de maneira bem inteligentes e práticas, podem ficar a vontade para me enviar... rs rs rs


Kitsystem
   - 13 fev 2006

Tambem agradeço a ajuda