Einzelnen Beitrag anzeigen

Tenobaal

Registriert seit: 9. Mai 2013
21 Beiträge
 
Delphi XE5 Professional
 
#1

Skaliertes ausdrucken eines Metafiles

  Alt 25. Jul 2014, 11:00
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;
Miniaturansicht angehängter Grafiken
unbenannt.jpg  
Angehängte Dateien
Dateityp: zip Metafile.zip (214,0 KB, 2x aufgerufen)

Geändert von Tenobaal (25. Jul 2014 um 11:03 Uhr)
  Mit Zitat antworten Zitat