Fórum Impressao no dbgrid #207750
20/01/2004
0
Como eu consigo fazer para imprimir os dados de um dbgrid, sem usar um outro intermediario de formatação de dados, sem ter q fazer um formulario antes, direto dbgrid para impressora ?!?!?!
Bolomaster
Curtir tópico
+ 0
Responder
Posts
20/01/2004
Vanius
Boa tarde Fera.
Nao sei se resolve:
1ª opcao. Coloque um botao na tela e em seu codigo digite PRINT;
isto fara com q sua tela seja impressa.
mas como acho q nao é isto q vc deseja, vamos a 2ª opcao:
procedure TfSQL.SpeedButton1Click(Sender: TObject);
var Cont : Integer;
Arquivo : TextFile;
Caminho : String;
begin
Cont := 0;
screen.Cursor := crHourGlass;
with fDM.ADOQrySQL do begin
Caminho := InputBox(´Informe o nome do arquivo´, ´Nome´, ´Consulta_´+FormatDateTime(´YYYYMMDDhhmmss´, Now)+´.txt´);
if Trim(Caminho) = ´´ then begin
Caminho := ´Consulta_´+FormatDateTime(´YYYYMMDDhhmmss´, Now)+´.txt´;
end;
try
AssignFile(Arquivo, ExtractFilePath(Application.ExeName)+Caminho);
except
Caminho := ´Consulta_´+FormatDateTime(´YYYYMMDDhhmmss´, Now)+´.txt´;
AssignFile(Arquivo, ExtractFilePath(Application.ExeName)+Caminho);
end;
Rewrite(Arquivo);
//Acrescenta os nomes dos campos
for Cont := 0 to FieldDefList.Count - 1 do begin
Write(Arquivo, Fields.Fields[Cont].DisplayName, ´;´);
end;
WriteLn(Arquivo);
//Acrescenta os valores dos campos
while not Eof do begin
for Cont := 0 to FieldDefList.Count - 1 do begin
Write(Arquivo, Fields.Fields[Cont].AsString, ´;´);
end;
WriteLn(Arquivo);
Next;
end;
CloseFile(Arquivo);
end;
screen.Cursor := crDefault;
MessageDlg(´Arquivo gerado com êxito!´+#13+
ExtractFilePath(Application.ExeName)+Caminho, mtInformation, [mbOK], 0);
end;
Este código pega o conteudo do dbgrid e envia para um arquivo TXT separado por ;
Se deseja enviar para a impressora, altere o comando
AssignFile(Arquivo, ExtractFilePath(Application.ExeName)+Caminho);
por
AssignFile(Arquivo, ´LPT1´);
Assim, seus dados serao enviados para a porta LPT1, independente da impressora q estiver lá.
Espero ter ajudado.
Abraços,
Vanius
Nao sei se resolve:
1ª opcao. Coloque um botao na tela e em seu codigo digite PRINT;
isto fara com q sua tela seja impressa.
mas como acho q nao é isto q vc deseja, vamos a 2ª opcao:
procedure TfSQL.SpeedButton1Click(Sender: TObject);
var Cont : Integer;
Arquivo : TextFile;
Caminho : String;
begin
Cont := 0;
screen.Cursor := crHourGlass;
with fDM.ADOQrySQL do begin
Caminho := InputBox(´Informe o nome do arquivo´, ´Nome´, ´Consulta_´+FormatDateTime(´YYYYMMDDhhmmss´, Now)+´.txt´);
if Trim(Caminho) = ´´ then begin
Caminho := ´Consulta_´+FormatDateTime(´YYYYMMDDhhmmss´, Now)+´.txt´;
end;
try
AssignFile(Arquivo, ExtractFilePath(Application.ExeName)+Caminho);
except
Caminho := ´Consulta_´+FormatDateTime(´YYYYMMDDhhmmss´, Now)+´.txt´;
AssignFile(Arquivo, ExtractFilePath(Application.ExeName)+Caminho);
end;
Rewrite(Arquivo);
//Acrescenta os nomes dos campos
for Cont := 0 to FieldDefList.Count - 1 do begin
Write(Arquivo, Fields.Fields[Cont].DisplayName, ´;´);
end;
WriteLn(Arquivo);
//Acrescenta os valores dos campos
while not Eof do begin
for Cont := 0 to FieldDefList.Count - 1 do begin
Write(Arquivo, Fields.Fields[Cont].AsString, ´;´);
end;
WriteLn(Arquivo);
Next;
end;
CloseFile(Arquivo);
end;
screen.Cursor := crDefault;
MessageDlg(´Arquivo gerado com êxito!´+#13+
ExtractFilePath(Application.ExeName)+Caminho, mtInformation, [mbOK], 0);
end;
Este código pega o conteudo do dbgrid e envia para um arquivo TXT separado por ;
Se deseja enviar para a impressora, altere o comando
AssignFile(Arquivo, ExtractFilePath(Application.ExeName)+Caminho);
por
AssignFile(Arquivo, ´LPT1´);
Assim, seus dados serao enviados para a porta LPT1, independente da impressora q estiver lá.
Espero ter ajudado.
Abraços,
Vanius
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)