Hi, ich habe ein Problem beim ausdrucken von Metafiles.
Mein Programm erstellt zur Laufzeit eine Instanz von TMetafiles und zeichnet darauf diverse Geometrien und Texte. Als Beispiel habe ich die Prozedur "ZeichneWas" beigefügt, welche mein Vorgehen beim zeichnen beschreibt. Anschließend wird das Metafile in das Canvas einer TImage Komponente geladen (siehe Bild).
Nun möchte ich das Metafile skaliert ausdrucken, was mir aber nicht gelingt. Ich habe diverse Codeschnipsel aus Büchern und Foreneinträgen ausprobiert z.B. die Prozeduren
Drucken und
Drucken2 (beide machen im Prinzip das gleiche). Zusätzlich habe ich mit
SetMapMode() sämtliche Koorinatensysteme des Druckers (MM_TEXT, MM_ISOTROPIC, MM_ANISOTROPIC etc.) ausprobiert. Mein Metafiles wird aber nie richtig skaliert.
Es ist stets die obere linke Ecke des Metafiles auf dem Blatt ausgedruckt, anstatt das komplette Bild.
Die Metafiles habe ich im .EMF und .WMF Format exportiert und dem Anhang beigefügt.
Delphi-Quellcode:
//Globale Variable
var WMF:TMetafile;
procedure ZeichneWas;
Begin
WMF.clear;
WMF.mmheight := Round(YIntern); //Y-Auflösung 500 Pixel
WMF.mmwidth := Round(XIntern); //X-Auflösung 750 Pixel
MetaCanvas:=TMetafileCanvas.Create(WMF, 0);
try
SetMapMode(MetaCanvas.Handle,MM_ANISOTROPIC);
(*
Dreiecke zeichnen und beschriften...
...
...
...
*)
MetaCanvas.Rectangle(0,0,wmf.mmWidth,wmf.mmHeight); //Rahmen zeichnen
finally
MetaCanvas.Free;
end;
End;
//Drucken des Metafile
procedure TFormNetview.Drucken;
var Scale:Double; Hoehe,Breite:Integer;
Begin
printer.Orientation:=poLandscape;
printer.BeginDoc;
Scale := Min(Printer.PageWidth/WMF.mmWidth,Printer.PageHeight/WMF.mmHeight);
Printer.Canvas.StretchDraw(Rect(0, 0, Round(WMF.mmWidth*Scale), Round(WMF.mmHeight*Scale)),WMF);
printer.EndDoc
End;
procedure TFormNetview.Drucken2;
Begin
printer.Orientation:=poLandscape;
printer.BeginDoc;
Printer.Canvas.StretchDraw(Rect(0,0,Printer.PageWidth,Printer.PageHeight), WMF);
printer.EndDoc
End;