AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Aus Printer.Canvas eine Druckvor. machen oder als BMP speich
Thema durchsuchen
Ansicht
Themen-Optionen

Aus Printer.Canvas eine Druckvor. machen oder als BMP speich

Ein Thema von LuckySpacy · begonnen am 11. Jul 2003 · letzter Beitrag vom 12. Jul 2003
Antwort Antwort
LuckySpacy

Registriert seit: 2. Apr 2003
Ort: Fränkisch-Crumbach
50 Beiträge
 
Delphi 10.4 Sydney
 
#1

Aus Printer.Canvas eine Druckvor. machen oder als BMP speich

  Alt 11. Jul 2003, 14:33
[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]
Thomas Bachmann
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#2

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

  Alt 11. Jul 2003, 23:32
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
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

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

  Alt 12. Jul 2003, 00:04
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.
  Mit Zitat antworten Zitat
Gast
(Gast)

n/a Beiträge
 
#4

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

  Alt 12. Jul 2003, 01:05
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!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

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

  Alt 12. Jul 2003, 09:57
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 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