// Hiermit werden
Grafiken millimetergenau ausgedruckt. Es wird die uses Printers; procedure Grafik_mm_Druck(Grafik: TGraphic; Mass: double; MassIstErwarteteBreite: boolean; links, oben: integer); var h: THandle; waagerechtePixel, senkrechtePixel: integer; BildHoehe, BildBreite: double; r: TRect; function rechnen(a: integer; w: double): integer; begin result := round((a * w) / 25.4); end; begin h := printer.handle; if MassIstErwarteteBreite then begin BildHoehe := Mass * (grafik.height / grafik.width); BildBreite := Mass; end else begin BildBreite := Mass * (grafik.width / grafik.height); BildHoehe := Mass; end; waagerechtePixel := getdevicecaps(h, logpixelsx); senkrechtePixel := getdevicecaps(h, logpixelsy); links := rechnen(waagerechtePixel, links) - getdevicecaps(h, physicaloffsetx); oben := rechnen(senkrechtePixel, oben) - getdevicecaps(h, physicaloffsety); r := rect(links, oben, links + rechnen(waagerechtePixel, BildBreite), oben + rechnen(senkrechtePixel, BildHoehe)); with printer do begin begindoc; canvas.stretchdraw(r, Grafik); enddoc; end; end; // die Werte für die gewünschte Bildbreite (33,true), den Abstand von der // linken Blattkante (50) und den Abstand von der oberen Blattkante (25) // werden in Millimetern angegeben procedure TForm1.Button2Click(Sender: TObject); begin Grafik_mm_Druck(Image1.picture.graphic, 33, True, 50, 25); end; // der erste Wert ist diesmal die erwartete Bildhöhe (33,false) procedure TForm1.Button3Click(Sender: TObject); begin Grafik_mm_Druck(Image1.picture.graphic, 33, False, 50, 25); end;
uses Printers; var gr: array of TGraphic; tr: array of TRect; zweiterWert: integer; procedure druck(grfk: array of TGraphic; rr: array of TRect); var x: integer; begin with printer do begin begindoc; for x := 0 to length(grfk) - 1 do canvas.stretchdraw(rr[x], grfk[x]); enddoc; end; end; function Grafik_mm_Vorbereitung(Grafik: TGraphic; Mass: double; MassIstErwarteteBreite: boolean; links, oben: integer): TRect; var h: THandle; waagerechtePixel, senkrechtePixel: integer; BildHoehe, BildBreite: double; function rechnen(a: integer; w: double): integer; begin result := round((a * w) / 25.4); end; begin h := printer.handle; if MassIstErwarteteBreite then begin BildHoehe := Mass * (grafik.height / grafik.width); BildBreite := Mass; zweiterWert := round(BildHoehe); end else begin BildBreite := Mass * (grafik.width / grafik.height); BildHoehe := Mass; zweiterWert := round(BildBreite); end; waagerechtePixel := getdevicecaps(h, logpixelsx); senkrechtePixel := getdevicecaps(h, logpixelsy); links := rechnen(waagerechtePixel, links) - getdevicecaps(h, physicaloffsetx); oben := rechnen(senkrechtePixel, oben) - getdevicecaps(h, physicaloffsety); result := rect(links, oben, links + rechnen(waagerechtePixel, BildBreite), oben + rechnen(senkrechtePixel, BildHoehe)); end; // Beispielaufruf procedure TForm1.Button1Click(Sender: TObject); var anzahl: integer; begin anzahl := 3; setlength(gr, anzahl); setlength(tr, anzahl); gr[0] := Image1.picture.graphic; gr[1] := Image2.picture.graphic; gr[2] := Image3.picture.graphic; tr[0] := Grafik_mm_Vorbereitung(gr[0], 33, True, 50, 25); tr[1] := Grafik_mm_Vorbereitung(gr[1], 50, True, 50, 100); tr[2] := Grafik_mm_Vorbereitung(gr[2], 45, True, 150, 25); druck(gr, tr); gr := nil; tr := nil; end;
procedure TForm1.Button5Click(Sender: TObject); var anzahl, breite, merk: integer; begin anzahl := 3; breite := 40; setlength(gr, anzahl); setlength(tr, anzahl); gr[0] := Image1.picture.graphic; gr[1] := Image2.picture.graphic; gr[2] := Image3.picture.graphic; tr[0] := Grafik_mm_Vorbereitung(gr[0], breite, True, 50, 25); merk := zweiterWert; tr[1] := Grafik_mm_Vorbereitung(gr[1], breite, True, 50 + breite, 25); tr[2] := Grafik_mm_Vorbereitung(gr[2], breite, True, 50, 25 + merk); druck(gr, tr); gr := nil; tr := nil; end;
|