Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   imprimir un stringgrid de un formulario (https://www.clubdelphi.com/foros/showthread.php?t=31450)

federiconqn21 08-05-2006 20:18:04

imprimir un stringgrid de un formulario
 
Hola:
Tengo la siguiente duda:Quisiera saber si se puede imprimir un stringgrid de un formulario,utilizando el printerSetupDialog.
Hasta donde yo se,se puede imprimir un formulario,tal como se ve en pantalla.Pero yo no quiero que se vean algunos componentes del form,tales como botones,labels,etc...Solo quiero imprimir el stringgrid.
Alguien ,me podria ayudar con este problema?
Desde ya muchas gracias...
Salu2

waltergomez 08-05-2006 22:32:39

Estaba un poco aburrido de mi rutina y aproveche tu problema para hacer algo distinto, esto funciona pero seguro debe haber una forma mejor.
Esta sacado del TForm.Print

procedure TForm1.PrintGridClick(Sender: TObject);
var
bm : TBitmap;
Ofs: Integer;
Bits: HBITMAP;
DIBWidth, DIBHeight: Longint;
PrintWidth, PrintHeight: Longint;
Image: Pointer;
ImageSize, InfoSize: DWORD;
Info: PBitmapInfo;
begin

if GetWindowLong(DBgrid1.Handle, GWL_STYLE) and WS_BORDER <> 0 then
Ofs := -1 // Don't draw form border
else
Ofs := 0; // There is no border

bm := TBitmap.Create;

bm.Width := DBgrid1.Width;
bm.Height := DBgrid1.Height;
bm.Canvas.Lock;
bm.Canvas.Brush := DBgrid1.Brush;
bm.Canvas.FillRect(DBgrid1.ClientRect);
DBgrid1.PaintTo(bm.Canvas.Handle, Ofs, Ofs);
Bits := bm.Handle;
GetDIBSizes(Bits, InfoSize, ImageSize);
Info := AllocMem(InfoSize);

try
Image := AllocMem(ImageSize);
try
GetDIB(Bits, 0, Info^, Image^);
with Info^.bmiHeader do
begin
DIBWidth := biWidth;
DIBHeight := biHeight;
end;
PrintWidth := MulDiv(DIBWidth, Printer.PageHeight, DIBHeight);
if PrintWidth < Printer.PageWidth then
PrintHeight := Printer.PageHeight
else
begin
PrintWidth := Printer.PageWidth;
PrintHeight := MulDiv(DIBHeight, Printer.PageWidth, DIBWidth);
end;
Printer.BeginDoc;
Printer.Canvas.Lock;
StretchDIBits(Printer.Canvas.Handle, 0, 0, PrintWidth, PrintHeight, 0, 0,
DIBWidth, DIBHeight, Image, Info^, DIB_RGB_COLORS, SRCCOPY);
Printer.Canvas.Draw(0,0,bm);
Printer.Canvas.Unlock;
Printer.EndDoc;

finally
FreeMem(Image, ImageSize);
end;
finally
FreeMem(Info, InfoSize);
bm.Canvas.Unlock;
bm.Free;
end;
end;


Saludos,

Neftali [Germán.Estévez] 09-05-2006 10:12:30

Por favor Walter, utiliza TAG's cuando añadas código Delphi a tus mensajes.


La franja horaria es GMT +2. Ahora son las 12:08:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi