 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
Darela Novato

Registrado: Terça-Feira, 12 de Dezembro de 2006 Mensagens: 7 Localização: Tubarão
|
Enviada: Ter Dez 12, 2006 8:30 am Assunto: Impressão Direta de Um Form |
|
|
Caros Amigos,
Estou iniciando em programação e tenho um desafio pela frente, que ainda não encontrei solução.
Preciso imrimir diretamente de um form, ou seja, eu abro o formulário entro com os dados nos campos e quero mandar imprimir os dados diretamente (os campos edit, label, memo, e imagens) como se fosse uma nota fiscal ou boleto, mas os procedimentos para as notas e boletos não deram certo, alguém poderia me ajudar.
Obrigado
Frank[/b] |
|
| Voltar ao Topo |
|
 |
edibertoalves Experiente

Registrado: Segunda-Feira, 15 de Agosto de 2005 Mensagens: 447 Localização: São Paulo - SP
|
Enviada: Ter Dez 12, 2006 8:55 am Assunto: |
|
|
Bom, se vc está iniciando na programação, é bom estudar sobre os componentes de geração de relatórios, existem vários por aí, free e pagos. QuickReport, Rave, FastReport, FortesReport, ReportBuilder.
Eles em sua maioria vão atender suas expectativas. Dá uma pesquisada, veja os demos! Blz?
Abraços
Ediberto |
|
| Voltar ao Topo |
|
 |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Ter Dez 12, 2006 9:04 am Assunto: |
|
|
Se eu entendi, vc quer tirar uma foto do form e imprimir, certo?
Tenta assim:
| Código: |
procedure PrintForm(frm: TForm);
var
bmp: TBitMap;
x, y, WDPI, HDPI: Integer;
OldColor: TColor;
begin
Screen.Cursor := crHourGlass;
OldColor := frm.Color;
frm.Color := clWhite;
frm.Update;
bmp := frm.GetFormImage;
with Printer do
begin
Orientation := poLandscape;
BeginDoc;
HDPI := PageHeight div 8;
WDPI := PageWidth div 8;
x := PageWidth - Round(WDPI * 0.4); {0.4" margem direita}
y := PageHeight - Round(HDPI * 0.5); {0.5" Altura do rodapé}
Canvas.StretchDraw(Rect(0, 0, x, y), bmp);
EndDoc;
end;
bmp.Free;
frm.Color := OldColor;
Screen.Cursor := crDefault;
end;
|
Para usar faça:
| Código: |
PrintForm(Self);
//-- ou
PrintForm(Form1);
|
OBS. Adicionar Printers na clausula uses
Abraços  _________________ Estou de volta!!! |
|
| Voltar ao Topo |
|
 |
Darela Novato

Registrado: Terça-Feira, 12 de Dezembro de 2006 Mensagens: 7 Localização: Tubarão
|
Enviada: Ter Dez 12, 2006 9:42 am Assunto: Impressão de form |
|
|
Quero imprimir todos os campos do form inclusive uma ou mais imagens que estarão em campos específicos, sõ que não quero gerar relátório, que terminar de preencher e eviar direto para impressão
Trata-se de uma cadastro de reservas para uma pousada/camping, então quando o cliente faz a reserva, é preenchido este formulário e em seguida impresso diretamente, como todos os campos(Tmemo, Tedit, Blob, Tlabe...)
Usei o código mas não funcionou, na hora de compilar e le para na linha : Pinter.BeginDoc; e o prrograma não roda
procedure Tform1.SpeedButton1Click(Sender: TObject);
var
C : array[0..255] of char;
CLen, ScaleX, ScaleY, Ind : Integer;
Format : Word;
DC : HDC;
MComp : Tmemo;
R : TRect;
begin
Printer.BeginDoc;
DC := Printer.Canvas.Handle;
ScaleX := GetDeviceCaps(DC, LOGPIXELSX) div PixelsPerInch;
ScaleY := GetDeviceCaps(DC, LOGPIXELSY) div PixelsPerInch;
for Ind := 0 to ComponentCount -1 do
if (Components[Ind] is TCustomLabel) or (Components[Ind] is TCustomEdit) then
begin
MComp := TMemo(Components[Ind]);
if (MComp.visible) then
begin
Printer.Canvas.Font := MComp.Font;
DC := Printer.Canvas.Handle;
R := MComp.BoundsRect;
R.Top := (R.Top + VertScrollBar.Position) * ScaleY;
R.Left := (R.Left + HorzScrollBar.Position) * ScaleX;
R.Bottom := (R.Bottom + VertScrollBar.Position) * ScaleY;
R.Right := (R.Right + HorzScrollBar.Position) * ScaleY;
if (not (Components[Ind] is TCustomLabel)) and (MComp.BorderStyle = bsSingle) then
Printer.Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
Format := DT_LEFT;
if (Components[Ind] is TEdit) or (Components[Ind] is TCustomMaskEdit) then
Format := Format or DT_SINGLELINE or DT_VCENTER
else
begin
if MComp.WordWrap then
Format := DT_WORDBREAK;
if MComp.Alignment = taCenter then
Format := Format or DT_CENTER;
if MComp.Alignment = taRightJustify then
Format := Format or DT_RIGHT;
R.Bottom := R.Bottom + Printer.Canvas.Font.Height + 1;
end;
CLen := MComp.GetTextBuf(C,255);
R.Left := R.Left + ScaleX + ScaleX;
DrawText(DC, C, CLen, R, Format);
end;
end;
Printer.EndDoc;
Close;
end;
O que será que tem de errado nesse código que não consigo compilar? |
|
| Voltar ao Topo |
|
 |
an.der.son Colaborador


Registrado: Quarta-Feira, 26 de Mai de 2004 Mensagens: 2275 Localização: Itaocara - RJ
|
Enviada: Ter Dez 12, 2006 9:54 am Assunto: |
|
|
Adicione Printers na clausula uses para ter acesso a Printer!!! _________________ Estou de volta!!! |
|
| Voltar ao Topo |
|
 |
Darela Novato

Registrado: Terça-Feira, 12 de Dezembro de 2006 Mensagens: 7 Localização: Tubarão
|
Enviada: Ter Dez 12, 2006 10:00 am Assunto: Impressão de um Form |
|
|
Valeu Anderson,
Realmente eu tinha me esquecido(coisa de novado, sabe como é, rsrsrsr) desse tetalhe, vou testar agora mesmo para ver o que acontece. |
|
| Voltar ao Topo |
|
 |
Darela Novato

Registrado: Terça-Feira, 12 de Dezembro de 2006 Mensagens: 7 Localização: Tubarão
|
Enviada: Ter Dez 12, 2006 10:05 am Assunto: Imprimir direto de um form |
|
|
Deu certo, Galera,
Espero que este tópico também possa ajudar outros ...[/b] |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|