![]() |
Aus Printer.Canvas eine Druckvor. machen oder als BMP speich
[df]Printer Canvas Druckvorschau[/df]
Hallo. Ich habe eine Komponente. Dies Komponenten hat eine Methode Print. Die Methode Print sieht wie folgt aus:
Delphi-Quellcode:
Ich möchte jetzt vor EndDoc den Inhalt von Printer.Canvas auf eine
procedure Print(FromPos, ToPos: Integer);
with Printer do begin Title := FPrintOptions.JobName; BeginDoc; PrintSelectionTo(Canvas, FromPos, ToPos); EndDoc; end; end; TPaintbox oder TImage zeichnen (Eine Art Druckvorschau) oder als Bitmap speichern. Es ist mir eigentlich egal wohin. Die Hauptsache ich kann mir das Ergebnis auf dem Bildschirm anzeigen. Wie geht das? Alle meine Versuchen sind bisher fehlgeschlagen. [edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit] |
Re: Aus Printer.Canvas eine Druckvor. machen oder als BMP sp
Hallo LuckSpacy!
Die Canvas des Printers ist so eine Sache. Bei mir ging es mal darum, die 3 Grundfarben CMY getrennt auf die Canvas zu setzen. Leider stellte es sich heraus, daß die Canvas beim Rücklesen immer weiß lieferte - mit der Folge: es galt die zuletzt gesetzte Farbe. Das ist offensichtlich druckerabhängig: der BJC620 und der BJC6200 lieferten weiß, der STAR LC 24-100 (Nadeldrucker, monochrom) lieferte -1, also Funktion nicht unterstützt. Mein Workaround sieht so aus, daß ich die Canvas im Programm aufbaue und dann am Seitenende auf den Drucker schicke - umständlich, aber klappt. Vermutlich liegt Dein Problem ähnlich. Gruß Dietmar Brüggendiek |
Re: Aus Printer.Canvas eine Druckvor. machen oder als BMP sp
Zitat:
Schreibe dir einfach eine Prozedur/Methode, der du die Canvas des Druckers übergibst und die Breite/Höhe der Canvas. Diese Methode zeichnet dann den Inhalt darauf. Wenn du nun deine Druckvorschau brauchst, rufst die genau dieselbe Methode auf, nur dass du diesmal die Canvas von z.B. einer PaintBox samt deren Breite/Höhe übergibst. |
Re: Aus Printer.Canvas eine Druckvor. machen oder als BMP sp
Klar, der Drucker ist doch ein DC (Device Context) wie jeder andere. Man kann ihn per BitBlt() und ähnlichen Funktionen kopieren. Dann haste den Inhalt. Allerdings darf noch nicht der Befehl zum Ausgeben des DC an den Drucker gegeben worden sein!
|
Re: Aus Printer.Canvas eine Druckvor. machen oder als BMP sp
Zitat:
Dann mach mal einen Screenshot von einem Fenster, das nicht angezeigt oder durch ein anderes verdeckt ist. Das funktioniert wohl nicht, da die Daten direkt aus dem Bildschirmspeicher geholt werden. Bei einem DC, der auf ein Bitmap angewand wird, geht das schon, da das Bitmap jedes Pixel "kennt". Und nun wieder die Kurve zum Drucker DC. Was der Druckertreiber hat, das hat er und gibt es nicht mehr her. Warum sollte er auch die schon für den Drucker umgewandelten Daten wieder in die Ursprungsdaten zurückwandeln. Es gibt Druckertreiber, die erst anfangen die Daten für den Drucker aufzubereiten, wenn EndDoc aufgerufen wird. Von diesen können aber auch nur ca. 2-3% den DC Inhalt wieder zurückliefern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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