Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Skaliertes ausdrucken eines Metafiles (https://www.delphipraxis.net/181214-skaliertes-ausdrucken-eines-metafiles.html)

Tenobaal 25. Jul 2014 11:00


Skaliertes ausdrucken eines Metafiles
 
Liste der Anhänge anzeigen (Anzahl: 2)
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;

Der schöne Günther 25. Jul 2014 11:12

AW: Skaliertes ausdrucken eines Metafiles
 
Ich habe was Drucken angeht Null Ahnung, ich habe das alles an FastReport abgeschoben.
Dort füge ich TMetaFile-Grafiken ein und die skalieren auch wie es soll. Ich weiß nicht, ob bei Delphi2007 schon irgendeine kostenlose Express-Version dabei ist- Wenn ja, sicher eine Überlegung wert.
Ob altes oder neues Format (EMF/WMF) hatte da übrigens keinen Unterschied gemacht.

Tenobaal 25. Jul 2014 11:30

AW: Skaliertes ausdrucken eines Metafiles
 
Mein Profil war leidern nicht mehr aktuell. Ich verwendet Delphi XE5 bzw. die Hochschule hats gekauft, weil ich im Rahmen meines Studium damit arbeite :oops:
FastReport sagt mir gerade nix. Ich wollte nur Standardkomponenten in meinem Programm verwenden.

sx2008 25. Jul 2014 22:28

AW: Skaliertes ausdrucken eines Metafiles
 
Deine X/Y Position dürfte im Bereich des Druckers sein in dem er nicht drucken kann.
Delphi-Quellcode:
procedure TFormNetview.Drucken2;
var
  TRect r;
Begin
  printer.Orientation:=poLandscape;
  printer.BeginDoc;
    r := Rect(0,0,Printer.PageWidth,Printer.PageHeight);
    InflateRect(r, -300, -300);  // Zielrechteck um 300 Pixel rundrum verkleinern
    // bei 300 dpi entspricht das einem Rand von einem Zoll  

    Printer.Canvas.StretchDraw(r, WMF);
  printer.EndDoc;
End;

Tenobaal 26. Jul 2014 17:52

AW: Skaliertes ausdrucken eines Metafiles
 
Funktioniert leider auch nicht. Wieder nur die obere Ecke sichtbar.
Ich glaube, dass die StretchDraw() Methode in Verbindung mit Metafiles fehlerhaft arbeitet. Ich habe Forenbeiträge gefunden, die darauf hindeuten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz