Hallo,
wenn ich das richtig verstehe, willst du ganz einfach, dass dein Ausdruck unabhängig von der Auslösung des Druckers immer gleich aussieht. Also, erstmal ein Code:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| type TPrinterPage = record PaperWidth, PaperHeight: Integer; BorderLeft, BorderTop, BorderRight, BorderBottom: Integer; PrintableWidth, PrintableHeight: Integer; end;
function GetPrinterPage: TPrinterPage; begin Printer.BeginDoc;
SetMapMode(Printer.Canvas.Handle, Mm_LoMetric);
Result.PaperWidth := Round((GetDeviceCaps(Printer.Canvas.Handle, PhysicalWidth) / GetDeviceCaps(Printer.Canvas.Handle, LogPixelsX)) * 25.4); Result.PaperHeight := Round((GetDeviceCaps(Printer.Canvas.Handle, PhysicalHeight) / GetDeviceCaps(Printer.Canvas.Handle, LogPixelsY)) * 25.4);
Result.BorderLeft := GetDeviceCaps(Printer.Canvas.Handle, PhysicalOffsetX) div 10; Result.BorderTop := GetDeviceCaps(Printer.Canvas.Handle, PhysicalOffsetY) div 10;
Result.PrintableWidth := GetDeviceCaps(Printer.Canvas.Handle, HorzSize); Result.PrintableHeight := GetDeviceCaps(Printer.Canvas.Handle, VertSize);
Result.BorderRight := Result.PaperWidth - (Result.BorderLeft + GetDeviceCaps(Printer.Canvas.Handle, HorzSize)); Result.BorderBottom := Result.PaperHeight - (Result.BorderTop + GetDeviceCaps(Printer.Canvas.Handle, VertSize));
Printer.Abort; end; |
Selbsterklärend. Rückgabewerte in mm.
Der Code "SetMapMode(Printer.Canvas.Handle, Mm_LoMetric);" ist GANZ Wichtig! Er stellt die Auflösung auf 0,1mm ein, d.h. ein Pixel aufm Canvas ist jetzt 1/10mm. Dann zeichnest du am besten dein Bitmap auf ein beliebiges Canvas, und kopierst es mit StretchDraw() oder StretchBlt() auf das PrinterCanvas. Bei StretchBlt() unbedingt mit SetStretchBltMode() auf HALFTONE oder zumindest COLORONCOLOR stellen.
Deine Weißen Flächen SIND HALT SO, dan kann ich auch nix für

. Alles, was NICHT Weiß ist, wird gedruckt. Weiße Ränder solltest du abschneiden, wenn sie nicht erwünscht sind.
SetMapMode() auch noch mal vor dem drucken aufrufen!!!