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.