![]() |
Drucken einer/mehrerer Groupboxen
Hallo!
Ich möchte gerne eine oder mehrere (vorherige Auswahl) Groupboxen drucken. Mit Form.print geht es nicht, da dann die ganze Form gedruckt wird. Also denke ich mit printer.canvas... ...aber wie? Eine Groupbox brauche ich in jedem Fall und weitere 9 Stück soll man nach belieben auswählen können. Diese befinden sich in einer Scrollbox, demnach kommt ein Screenshot leider nicht in Frage. Hat jemand ne Idee??? P.S.: in jeder Groupbox befinden sich ca. 200 DBEdit's und entsprechnede Labels, demnach macht FastRep oder QuickRep keinen Spaß zu erstellen. |
AW: Drucken einer/mehrerer Groupboxen
Hallo sebastian1979,
eine Idee: GroupBox.PaintTo habe ich noch nie ausprobiert, ob da die Child-Controls mitgezeichnet werden, ich vermute mal... Gruss, blauweiss |
AW: Drucken einer/mehrerer Groupboxen
Vielen Dank, werde ich probieren.
|
AW: Drucken einer/mehrerer Groupboxen
Du kannst es ja mal mit dieser Prozedur versuche:
Delphi-Quellcode:
Also dann ungefähr so:
type TGraphicControlcracker = class(TGraphicControl);
procedure PaintControlToCanvas(control:TControl; Canvas:TCanvas; x,y:Integer); var dest, src : TRect; begin Assert(Assigned(control)); Assert(Assigned(canvas)); if control is TWinControl then TWinControl(control).PaintTo(Canvas.Handle, x, y) else if control is TGraphicControl then begin src := control.ClientRect; dest := src; OffsetRect(dest, x, y); Canvas.CopyRect(dest, TGraphicControlCracker(control).Canvas, src); end else Assert(False, 'PaintControlToCanvas: Control-Class not supported'); end;
Delphi-Quellcode:
Zu beachten ist, dass die Controls eins zu eins gedruckt werden.
Printer.BeginDoc;
PaintControlToCanvas(GroupBox1, Printer.Canvas, 100, 80); ... Printer.EndDoc; Bei 600dpi Druckerauflösung kann das Ergebnis sehr klein ausfallen. |
AW: Drucken einer/mehrerer Groupboxen
Vielen Dank shmia,
die procedure funktionert einwandfrei, die Vergrößerung habe ich wie folgt gelöst:
Delphi-Quellcode:
Danke nochmal.
printer.Orientation := poLandscape;
printer.BeginDoc; SetMapMode(Printer.Canvas.Handle, MM_ISOTROPIC); SetWindowExtEx(Printer.Canvas.Handle, 1, 1, nil); SetViewportExtEx(Printer.Canvas.Handle, 5, 5, nil); //Zoomfaktor PaintControlToCanvas(MHauptmaske.Auftrag, Printer.Canvas, 50, 50); if checkbox1.Checked = true then PaintControlToCanvas(MHauptmaske.GroupBox1, Printer.Canvas, 50, 70+MHauptmaske.Auftrag.Height); Printer.EndDoc; Gruss, Sebastian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz