AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Druckervorschau

Ein Thema von Fourcorner · begonnen am 20. Jan 2005 · letzter Beitrag vom 31. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Fourcorner

Registriert seit: 26. Aug 2004
Ort: Grenzach-Wyhlen
51 Beiträge
 
Delphi 7 Personal
 
#1

Druckervorschau

  Alt 20. Jan 2005, 12:59
Hallo,
ich habe eine DruckProcedure geschrieben, die dem Drucker über printer.canvas "Daten" übermittelt.
Bevor der Druck jedoch beginnt hätte ich noch gern ein Fenster mit dem Seiteninhalt, der anschließend gedruckt wird, angezeigt. Kann ich dafür irgendwie die Daten vom printer.canvas verwenden, oder muss ich das ganze noch mal für eine andere Komponente schreiben?

Meine erste Idee war, die Daten von printer.canvas in eine PaintBox zu laden doch bei

paint.Canvas. := printer.canvas; kommt der Fehler:

Zitat:
Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden
gibt es da noch einen anderen Weg, die Canvas zu überladen?.
Julian
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Druckervorschau

  Alt 20. Jan 2005, 13:09
Soweit ich mich erinnere hat ein Canvas auch noch die Eigenschaft "Pixels[x,y]", mit der man jeden Pixel einzeln ansprechen kann. Eventuell könnte man damit eine Vorschau erzeugen, dass man x und y in einer (For-)Schleife durchlaufenlässt und die pixel einzeln kopiert.
(Ich weiß, dass das relativ langsam sein wird, aber es ist erstmal ein Ansatz.)

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#3

Re: Druckervorschau

  Alt 20. Jan 2005, 13:30
Hi,

keine Ahnung, ob's funktioniert, aber TCanvas besitzt die Methode Delphi-Referenz durchsuchenAssign


edit: Schau Dir mal Delphi-Referenz durchsuchenStretchDraw an.

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Thunderman

Registriert seit: 14. Jun 2002
Ort: Lüneburg
13 Beiträge
 
#4

Re: Druckervorschau

  Alt 20. Jan 2005, 18:53
Oder über das Handle der Canvas-Objekte direkt mit den Funktionen der WinAPI mit BitBlt oder StretchBlt. Siehe dazu dann sonst im MSDN nach.
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
  Mit Zitat antworten Zitat
Fourcorner

Registriert seit: 26. Aug 2004
Ort: Grenzach-Wyhlen
51 Beiträge
 
Delphi 7 Personal
 
#5

Re: Druckervorschau

  Alt 21. Jan 2005, 15:45
Hallo,

Zitat:
Soweit ich mich erinnere hat ein Canvas auch noch die Eigenschaft "Pixels[x,y]", mit der man jeden Pixel einzeln ansprechen kann. Eventuell könnte man damit eine Vorschau erzeugen, dass man x und y in einer (For-)Schleife durchlaufenlässt und die pixel einzeln kopiert.
(Ich weiß, dass das relativ langsam sein wird, aber es ist erstmal ein Ansatz.)
Wenn ich das mache, bekomme ich eine schwarze Canvas. ()

Zitat:
keine Ahnung, ob's funktioniert, aber TCanvas besitzt die Methode Schau in die Delphi-HilfeAssign
Gute Idee, Fehlermeldung beim Ausführen: TPrinterCanvas ist nicht mit TControlCanvas kompatible ( )

Zitat:
Oder über das Handle der Canvas-Objekte direkt mit den Funktionen der WinAPI mit BitBlt oder StretchBlt. Siehe dazu dann sonst im MSDN nach.
Ich habe in der MSDN nachgesehen aber nichts gefunden...Kann das überhaupt gehen, da nach der oberen Fehlermeldung es sich hierbei um zwei verschiedene Canvas handelt?
Julian
  Mit Zitat antworten Zitat
Thunderman

Registriert seit: 14. Jun 2002
Ort: Lüneburg
13 Beiträge
 
#6

Re: Druckervorschau

  Alt 22. Jan 2005, 10:32
Wenn man auch lesend auf das Canvas des TPrinter Objektes zugreifen kann, wovon ich mal ausgehe, sollte das schon gehen. Theoretisch sollte das in etwa so aussehen, wenn du z.Bsp. auf das TForm-Objekt Form1 zeichnen willst:
BitBlt(Form1.Canvas.Handle, 0, 0, breite, hoehe, printer.Canvas.Handle, 0, 0, SRCCOPY); Sofern dein Canvas Objekt natürlich die notwendige Breite und Höhe besitzt sollte das meines Erachtens gehen.
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
  Mit Zitat antworten Zitat
Fourcorner

Registriert seit: 26. Aug 2004
Ort: Grenzach-Wyhlen
51 Beiträge
 
Delphi 7 Personal
 
#7

Re: Druckervorschau

  Alt 22. Jan 2005, 17:54
hallo,
der Code funktioniert aber nicht:
Es kommt eine Fehlermeldung, dass die beiden Canvas nicht zueinander kompatiebel sind

Hat da jemand noch eine Idee?
Julian
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Druckervorschau

  Alt 22. Jan 2005, 19:31
Nur mal so eine Idee: man könnte statt der Paintbox auch ein extra Formular erstellen, auf dessen Canvas dann die Vorschau angezeigt wird.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Thunderman

Registriert seit: 14. Jun 2002
Ort: Lüneburg
13 Beiträge
 
#9

Re: Druckervorschau

  Alt 23. Jan 2005, 10:55
Hallo!

Das mit auf einer Form zeichnen ändert in diesem Falle nichts, da das Canvas des TPrinter Objekts ein anderes Format hat. Wennn es überhaupt geht, muss man wahrscheinlich das ganze in etwa so lösen:
Delphi-Quellcode:
var
  h_DC, hdc_mem, temp : HDC;
begin
  h_DC := GetDC(Form1.Handle);
  hdc_mem := CreateCompatibleDC(h_DC);
  temp := SelectObject(hdc_mem, Printer.Canvas.Handle);
  BitBlt(h_DC, 0, 0, Breite, Hoehe, hdc_mem, 0, 0, SRCCOPY);
  SelectObject(hdc_mem, temp);
  DeleteDC(hdc_mem);
  ReleaseDC(Form1.Handle, h_DC);
Sicher bin ich mir dabei jetzt aber nicht, da ich das ganze gerade nicht in Delphi testen kann. Aber vielleicht guckt ja hier noch jemand rein, der etwas vesierter mit den GDI Funktionen ist. Ansonsten würde ich eine Druckfunktion erstellen, die ein TCanvas als Parameter übernimmt und dann auf diesem alles ausgibt. Dann ruft man diese zuerst mit dem Canvas der Druckvorschau auf und anschließend wenn der Nutzer OK drückt eben mit dem Printer-Canvas. Da sollte man aber natürlich nicht vergessen dann BeginDoc und EndDoc aufzurufen.
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#10

Re: Druckervorschau

  Alt 23. Jan 2005, 13:30
Moin, Teetimemoin,

also ich denke, dass es aufgrund der doch sehr unterschiedlichen Auflösungen von Bildschirm zu Drucker ziemlich sinnlos ist, den Druckercanvas fürdie Bildschirmanzeige herunterzurechnen. Denke Du solltest den Druck auf zwei Canvas mit unterschiedlicherAuflösung drucken. Einen für den Bildschirm,einen für den Ausdruck. Das Verfahren gibt es praktisch bei AlReport angewendet.

Etwas Einarbeitungszeit braucht man dafür aber auch..

Grüße // Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:24 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