Entwickler-Ecke
Multimedia / Grafik - schatten vom printdialog auf ausdruck
mk2 - Mi 02.10.02 11:32
Titel: schatten vom printdialog auf ausdruck
Hi,
ich will die canvas meiner form ausdrucken. Das klappt auch schon ganz gut, wenn ich allerdings vorher einen printdialog aufrufe befindet sich unter der Gesamten Fläche die der printdialog eingenommen hat, nur eine leere graue Fläche.
durch form1.canvas.refresh habe ich wieder das komplette bild hergestellt allerdings nur auf dem bildschirm und nicht auf dem ausdruck. Dort ist nachwievor ein graues quadrat wo der dialog war, obwohl ich die canvas ja refresht habe, bevor ich sie auf den drucker kopiert hab. Ich bin echt ratlos - der code sieht ungefähr so aus :
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.PrintClick(Sender: TObject); var w,h,wp,hp:integer; begin if Printdialog1.Execute then begin printer.BeginDoc; Form1.Canvas.Refresh; w:=form1.Width; h:=form1.Height; wp:=printer.PageWidth; hp:=wp*h div w; Printer.Canvas.CopyRect(Rect(0,0,wp,hp), Form1.Canvas,Rect (0,0,w,h)); printer.EndDoc; end; end; |
hat jemand ne idee was ich falsch mache?
mfg micha
Matthias - Mi 02.10.02 23:27
Hallo,
nur mal so ein paar Vermutungen. Das Refresh Kommando sorgt, soweit ich weiss, lediglich dafür, dass das Canvas die Nachricht "Neu zeichnen" bekommt. Diese bekommt es sowie so schon, wenn der Drucker Dialog beendet wird.
Diese Nachrichten kleben jetzt in der Que und warten darauf abgearbeitet zu werden.
Ergo Du musst für die Abarbeitung vor der Ausgabe auf den Drucker sorgen z.B. mit Application.ProcessMessages.
Windows arbeitet Nachrichtenorientiert :evil: :? (quasi Multitasking).
ciao :wink:
Matthias
mk2 - Fr 04.10.02 08:24
vielen dank,
ich hab die processmessages direkt nach dem canvas.refresh eingebaut und jetzt gehts. :D
mfg micha
mk2 - Fr 11.10.02 09:11
ich hab jetzt ein neues problem mit dieser copyrect anweisung.
hat auf meinem hp deskjet wunderbar funktioniert, aber ich hab das ganze mal auf verschiedenen druckern ausprobiert und bei uns im netzwerk gibt es zwei drucker (jeweils laser und mit eigenem netzanschluss), die damit überhaupt nichts anfangen können und immer nur ein leeres blatt ausspucken.
Die drucker funktionieren aber und wenn ich einen simplen befehl wie z.B.:
Quelltext
1: 2: 3:
| printer.begindoc; printer.canvas.ellipse(300,300,600,600); printer.enddoc; |
benutze, drucken die auch meinen kreis aus aber copyrect funktioniert nicht.
Ich hab jetzt 2 Fragen. Warum funktioniert es nicht und was gibt es für alternativen?
mfg
mk2
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!