Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Drucken einer/mehrerer Groupboxen (https://www.delphipraxis.net/159466-drucken-einer-mehrerer-groupboxen.html)

sebastian1979 29. Mär 2011 15:48


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.

blauweiss 29. Mär 2011 16:03

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

sebastian1979 29. Mär 2011 16:09

AW: Drucken einer/mehrerer Groupboxen
 
Vielen Dank, werde ich probieren.

shmia 29. Mär 2011 16:10

AW: Drucken einer/mehrerer Groupboxen
 
Du kannst es ja mal mit dieser Prozedur versuche:
Delphi-Quellcode:
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;
Also dann ungefähr so:
Delphi-Quellcode:
Printer.BeginDoc;
PaintControlToCanvas(GroupBox1, Printer.Canvas, 100, 80);
...
Printer.EndDoc;
Zu beachten ist, dass die Controls eins zu eins gedruckt werden.
Bei 600dpi Druckerauflösung kann das Ergebnis sehr klein ausfallen.

sebastian1979 30. Mär 2011 09:31

AW: Drucken einer/mehrerer Groupboxen
 
Vielen Dank shmia,

die procedure funktionert einwandfrei, die Vergrößerung habe ich wie folgt gelöst:

Delphi-Quellcode:
  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;
Danke nochmal.

Gruss,
Sebastian


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz