Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PaintBox drucken (https://www.delphipraxis.net/32192-paintbox-drucken.html)

bernie110 20. Okt 2004 09:30


PaintBox drucken
 
Hallo,
ich habe ein Problem, das ich trotz intensiver Suche in der DP noch nicht lösen konnte. :(

Ich habe eine sehr komplizierte Liniengrafik incl. eingestreuten Texten, die ich in die Paintbox (als Komponente einer Scrollbox) meines Formulars mit MoveTo, LineTo, TextOut etc. gezeichnet habe. Diese Paintbox ist ca. 3000 x 7000 Pixel groß, hängt aber von den zu zeichnenden Linien ab.

Das Ganze funktioniert ohne Probleme, solange ich die Grafik auf dem Bildschirm ausgebe. Wenn ich sie aber drucken will, so kommt nur der Bildschirminhalt - sogar mit Taskleiste - auf dem Drucker(-Canvas) an - und auch nur, wenn der linke obere Teil der PaintBox angezeigt wird.

Meine Frage ist nach dem grundsätzlichen Vorgehen in so einem Fall:

Ist die PaintBox die "richtige" Komponente?
Oder muss ich den Umweg über ein Bitmap gehen, das ich erst in die PaintBox und dann auf den Drucker ausgebe?
Oder ist Image oder Metafile das Richtige?

Und was kopiere ich dann auf den Drucker-Canvas?

Danke im Voraus für Eure Antworten!

Bernie

Luckie 20. Okt 2004 13:02

Re: PaintBox drucken
 
Genauso wie du auf das canvas der Paitnbox zeichnen kannst, kannst du auch auf den Canvas des Druckers zeichnen.

bernie110 20. Okt 2004 14:13

Re: PaintBox drucken
 
Hallo,
heißt das, dass ich die Zeichenroutine auslagern muss (eigene Procedure) und dann 2x aufrufen muss: einmal für den Bildschirm und das andere Mal, wenn ich die Zeichnung drucken will?

Bernie

fkerber 20. Okt 2004 14:16

Re: PaintBox drucken
 
Hi!

Vielleicht geht es ja auch, indem du dem Canvas des Printers den Canvas der Paintbox zuweist? Oder zumindest ein Copy des einen Canvas auf den anderen. Das geht bestimmt fixer als immer 2x zeichnen.

Ciao Frederic

Luckie 20. Okt 2004 14:29

Re: PaintBox drucken
 
Ich würde sowieso nicht direkt auf den Canvas der Paintbox zeichnen, sonder auf ein Bitmap im Speicher. das kannst du dann auch mit BitBlt aif den Canvas des Druckers kopieren.

bernie110 21. Okt 2004 09:10

Re: PaintBox drucken
 
Hallo,
Danke erst einmal für die Tipps!

Was ist eigentlich der Vorteil davon, erst auf ein Bitmap im Speicher zu zeichnen gegenüber dem Zeichnen in die Paintbox?

Bernie

Sharky 21. Okt 2004 10:05

Re: PaintBox drucken
 
Zitat:

Zitat von bernie110
...erst auf ein Bitmap im Speicher zu zeichnen gegenüber dem Zeichnen in die Paintbox?...

Zum einen gibt es kein flackern wenn Du eine Aufwendige "Zeichnung" erzeugst da ja das fertige Bild kopiert wird.
Ausserdem kannst Du so das Bild wieder herstellen wenn es, z.B. durch ein darüber liegendes Fenster, gelöscht wurde.

Luckie 21. Okt 2004 10:36

Re: PaintBox drucken
 
Grfaikausgaben auf den Canvas sind von Haus aus langsam. Das Zeichnen auf ein Bitmap im Speicher ist jedoch schnell. Und das kopieren des Bitmaps im Speicher auf den Canvas mit BitBlt ist auch wesentlich schneller als das direkte Zeichnen. Wie das mit dem OffScreenBitmap funktioniert, kannst du dir hier ankucken: http://www.luckie-online.de/Delphi/S...eenBitmap.html

bernie110 21. Okt 2004 10:44

Re: PaintBox drucken
 
Hallo,
nochmals Danke für die Erläuterungen und den Link. :)

Nun habe ich für's Wochenende etwas :wink: zu tun (bisheriges Programm umschreiben und Drucken ausprobieren) :coder:

Bernie

Luckie 21. Okt 2004 10:46

Re: PaintBox drucken
 
Tipp: Installier dir einen Postscriptdrucker. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 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