Autor Beitrag
mk2
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

WIN 2000
D4 Prof
BeitragVerfasst: Mi 02.10.02 11:32 
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 :


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 121



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

WIN 2000
D4 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 72

WIN 2000
D4 Prof
BeitragVerfasst: 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.:

ausblenden 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