Impressão direta

02/02/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)


Pro-luck

Respostas

02/02/2006

Aroldo Zanela

Colega,

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

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.


Responder Citar

02/02/2006

Pro-luck

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:


Responder Citar

03/02/2006

Aroldo Zanela

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.


Responder Citar

03/02/2006

Aroldo Zanela

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.


Responder Citar

03/02/2006

Eniorm

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 [b:1402eceafd]VDOPrint[/b:1402eceafd], feito pelo amigo Vinicius2k daqui do forum, o componente está na versão 3 e agora possui um Preview..

VDOPrint: [b:1402eceafd]www.devres.cjb.net[/b:1402eceafd]

abraço


Responder Citar

11/02/2006

Pro-luck

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...


Responder Citar

11/02/2006

Edilcimar

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´);


Responder Citar

11/02/2006

Pro-luck

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...


Responder Citar

11/02/2006

Vinicius2k

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:
var
  SBuf: string;

procedure WriteToBuf(ACol: Integer; S: string);
var
  I: Integer;
begin
  for I := 0 to Pred(Length(S)) do
    SBuf[ACol+I&93; := S&91;Succ(I)&93;;
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&93;));
  WriteToBuf(031, Txt3);
  WriteToBuf(041, Txt4);
  WriteToBuf(051, Format(´¬7.7d´, &91;Int2&93;));
  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 ;)


Responder Citar

12/02/2006

Kitsystem

Sempre trabalhei com apenas CloseFile(MyFile);

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


Responder Citar

12/02/2006

Chmelo

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


Responder Citar

13/02/2006

Kitsystem

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);


Responder Citar

13/02/2006

Dopi

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 [b:3454709c8c]CloseFile [/b:3454709c8c]da Unit [b:3454709c8c]System[/b:3454709c8c]


Responder Citar

13/02/2006

Pro-luck

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


Responder Citar

13/02/2006

Kitsystem

Tambem agradeço a ajuda


Responder Citar