QuickReport und TPrinter / Canvas kopieren
-
Hallo!
Ich muss ein TWinControl auf Papier bringen - und zwar in einem QuickReport.
Um das zu machen, habe ich den folgenden Code:TPrinter *Prntr = Printer(); Prntr->BeginDoc(); SetMapMode( Prntr->Canvas->Handle, MM_ANISOTROPIC ); SetWindowExtEx(Prntr->Canvas->Handle, GetDeviceCaps(Canvas->Handle, LOGPIXELSX), GetDeviceCaps(Canvas->Handle, LOGPIXELSY), NULL); SetViewportExtEx(Prntr->Canvas->Handle, GetDeviceCaps(Prntr->Canvas->Handle, LOGPIXELSX), GetDeviceCaps(Prntr->Canvas->Handle, LOGPIXELSY), NULL); o1->PaintTo(Prntr->Canvas, 0, 0); //o1 ist mein TWinControl Prntr->EndDoc();Leider muss ich mit SetMapMode, SetWindowExtEx und SetVierportExtEx die Auflösung des Druckers ändern, sonst kommt dummerweise nur Quatsch raus. (Das ausgedruckte Control sieht dann einfach nicht so aus wie am Monitor, viel zu klein etc.)
Dieser Code funktioniert auch prima. Nur möchte ich die Ausgabe jetzt nicht auf dem normalen Printer-Objekt ausdrucken, sondern auf einem QuickReport, wo auch schon andere Texte angezeigt werden.
Ich habe das daher so probiert: Im "OnEndPage" Ereignis des QuickReports habe ich den selben Code wie oben geschrieben, nur als Printer dann QuickRep1->QRPrinter verwendet.
Leider funktioniert das aber nicht. Die Auflösung wird nicht geändert...Gut, dann habe ich mir gedacht, vielleicht kann ich mir beim Druck des QuickReports ja dessen Canvas kopieren und auf dem normalen Printer - Objekt ausgeben. Funktioniert aber auch nicht: Wenn ich im "OnEndPage" Ereignis des QuickReports das hier rein schreibe:
Printer()->BeginDoc(); Printer()->Canvas->CopyRect(MyRect, QuickRep1->QRPrinter->Canvas, MyRect); Printer()->End();wird auf dem Printer nur eine weisse Seite gedruckt.
Kann ich denn nicht den Druckercanvas vom QuickReport irgendwie auf das Printer() Objekt "kopieren"??
...in der Hoffnung, dass es doch noch ein paar Leute gibt, die sich ausser mir noch mit QuickReport beschäftigen

tschüss
Robert
-
Vielleicht ein etwas naiver Ansatz:
Erstell ein TBitmap aus dem Canvas von ol und verwende im QuickReport ein QRImage.
-
Hallo Joe!
Erstmal Danke für deine Antwort!
Das habe ich schon probiert. Leider sieht das am Ausdruck dann immer sehr pixelig aus und kleine Schriftarten (welche o1 enthält) kann man dann gar nicht mehr lesen.
Warum kann ich denn den Canvas von QuickReport nicht nutzen?QuickReport muss doch im Hintegrund auch irgendwie einen TPrinter verwenden, oder? Kann ich nicht während des Drucks irgendwie auf den TPrinter zugreifen, um selbst Hand anzulegen.
Wenn mein Control in der Vorschau nicht angezeigt wird, wäre das gar noch nicht mal so schlimm, am Druck später muss es eben vorhanden sein...tschüss
Robert
-
Hallo Robert,
ich hab' mir gerade noch mal die Hilfe zu QR angesehen. Leider ist mir dabei nichts aufgefallen, was Dir behilflich sein könnte. Ich bin mir nicht mal sicher, ob Du den Canvas eines Druckers überhaupt einlesen kannst. Und wenn doch, stellt sich immer noch die Frage nach dem Timing. M.E. kann in dem Canvas doch nur was sein, wenn auch tatsächlich etwas gedruckt wird. Vielleicht kann man aber mit der Preview des QR etwas machen.
Hast Du schon versucht eine Kopie der Komponente direkt auf dem QR zu erzeugen. Hab' irgendwo gelesen, dass das gehe soll (kann mich aber nicht mehr erinnern wo).
-
Hallo Joe!
Hast Du schon versucht eine Kopie der Komponente direkt auf dem QR zu erzeugen
Ich habe versucht, mittels PaintTo() direkt auf ein QRImage zu zeichnen. Da habe ich aber wieder das Problem, dass ich die Auflösung nicht umstellen kann.
Kennst du die Stampit-Frankierung der Deutschen Post? In einem OleControl habe ich diesen Vermerk, den ich auf Papier bringen möchte und zwar mittels QuickReport.
Wenn ich direkt auf ein QRImage "paintto'e" dann ist dieser Frankiervermerk irgendwie defekt (Die Punkte sind zu klein).
Ich muss ausserdem auf "ANSIOTROPIC" umstellen, damit's überhaupt funktioiert...Langsam verzweifle ich daran, hab schon 2 Tage gebraucht, bis ich das Ding erstmal auf TPrinter drucken konnte... Auf das Problem mit der Auflösung muss man erst mal kommen...
Wenn ich wüsste, wie ich direkt auf den TPrinter zugreifen könnte, den QuickReport verwendet, würde mir das wahrscheinlich helfen...
tschüss
Robert
-
rowisoft schrieb:
Wenn ich wüsste, wie ich direkt auf den TPrinter zugreifen könnte, den QuickReport verwendet, würde mir das wahrscheinlich helfen...
Und genau dazu habe ich nichts gefunden.
Ohne dass ich damit praktische Erfahrung habe, scheint mir der einzige Weg über TQRPreview zu sein. Damit läßt sich, laut Hife, eine eigene Vorschau erstellen. Dort solltest Du Zugriff auf den Canvas haben, diesen modifizieren können und gegebenenfalls direkt an einen Drucker senden können.