Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Aus Printer.Canvas eine Druckvor. machen oder als BMP speich (https://www.delphipraxis.net/6464-aus-printer-canvas-eine-druckvor-machen-oder-als-bmp-speich.html)

LuckySpacy 11. Jul 2003 13:33


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:
procedure Print(FromPos, ToPos: Integer);
  with Printer do
  begin
    Title := FPrintOptions.JobName;
    BeginDoc;
    PrintSelectionTo(Canvas, FromPos, ToPos);
    EndDoc;
  end;
end;
Ich möchte jetzt vor EndDoc den Inhalt von Printer.Canvas auf eine
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]

Brüggendiek 11. Jul 2003 22:32

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

jbg 11. Jul 2003 23:04

Re: Aus Printer.Canvas eine Druckvor. machen oder als BMP sp
 
Zitat:

Zitat von LuckySpacy
Ich möchte jetzt vor EndDoc den Inhalt von Printer.Canvas auf eine
TPaintbox oder TImage zeichnen

Der Drucker(treiber) ist normalerweise eine Einbahnstraße. Das was du ihm gibst (zeichnen) gibt er nicht wieder her.

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.

Gast 12. Jul 2003 00:05

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!

jbg 12. Jul 2003 08:57

Re: Aus Printer.Canvas eine Druckvor. machen oder als BMP sp
 
Zitat:

Zitat von Assarbad
Klar, der Drucker ist doch ein DC (Device Context) wie jeder andere.

So so. Der DC ist gleich, nur das Gerät (device), dass er anspricht hält die Daten.

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 23:34 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