also, gaaanz einfach:
In der Unit Printers befindet sich die Klasse TPrinter. Mit der kannst du beliebiges auf den Drucker ausgeben. Auch dein Formular oder einen Teil davon.
Beispiel:
var p: TPrinter;
XDest, YDest, XSrc, YSrc: Integer;
PWidth, PHeight: Integer;
begin
// X bzw. Y für Ausgabe auf Papier (hier ist zu beachten, dass ein Pixel beim Drucker sehr klein ist und
//abhängig von der gewählten Auflösung.
//Z.B. 600 dpi entsprechen 600 Pixel einem Inch = 2,54 cm)
XDest:= 50;
YDest:= 50;
// Ausschnitt des Formulars, der gedruckt werden soll
XSrc:= 0;
YSrc:= 0; // Angefangen in der linken oberen Ecke
PWidth:= self.Width div 2;
PHeight:= self.Height div 2; // Bis Hälfte Breite bzw. Höhe, also linkes oberes Viertel drucken
p.BeginDoc;
// Formular drucken
BitBlt(p.Canvas.handle, XDest, YDest, PWidth, PHeight, self.Canvas.handle, XSrc, YSrc, SRCCOPY);
p.EndDoc;
end;
nicht probiert, aber müsste so funktionieren.
Wenn du die Ausgabe skalieren willst musst du "StretchBlt" nehmen, falls du die Ausgabe drehen willst "PlgBlt" (geht nur unter NT und folgende, nicht 9x)
Für nur Text nimmst du Printer.Canvas.TextOut (Wobei wenn du ein Textfile o.ä. drucken willst die Methoden von vorhandenen Komponenten (TRichEdit o.ä.) einfacher zu nutzen sind )
Ach ja, geht mit allen Delphi Versionen... nicht möglich bei D5 Enterprise
@Pointerman: Eine TCanvas Methode Print gibt es nicht.
Was mir gerade noch einfällt... mit dem Beispiel oben Druckst du nur den Client Bereich, also onhe Fenster Titelleiste. Wenn du die haben willst musst du das Handle vom Desktop nehmen bei BitBlt.
aus dem Kopf sag ich mal das müsste so gehen:
var: DC: HDC
begin
DC:= GetDC(0);
BitBtl(p.canvas.handle, 0, 0, 50, 50, DC, self.left, self.top, SRCCOPY);
freedc(DC);
end;
so ungefähr zumindest...