AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Skaliertes ausdrucken eines Metafiles
Thema durchsuchen
Ansicht
Themen-Optionen

Skaliertes ausdrucken eines Metafiles

Ein Thema von Tenobaal · begonnen am 25. Jul 2014 · letzter Beitrag vom 26. Jul 2014
Antwort Antwort
Tenobaal

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

Skaliertes ausdrucken eines Metafiles

  Alt 25. Jul 2014, 12: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 12:03 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Skaliertes ausdrucken eines Metafiles

  Alt 25. Jul 2014, 12:12
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.
  Mit Zitat antworten Zitat
Tenobaal

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

AW: Skaliertes ausdrucken eines Metafiles

  Alt 25. Jul 2014, 12:30
Mein Profil war leidern nicht mehr aktuell. Ich verwendet Delphi XE5 bzw. die Hochschule hats gekauft, weil ich im Rahmen meines Studium damit arbeite
FastReport sagt mir gerade nix. Ich wollte nur Standardkomponenten in meinem Programm verwenden.

Geändert von Tenobaal (25. Jul 2014 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Skaliertes ausdrucken eines Metafiles

  Alt 25. Jul 2014, 23:28
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;
fork me on Github
  Mit Zitat antworten Zitat
Tenobaal

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

AW: Skaliertes ausdrucken eines Metafiles

  Alt 26. Jul 2014, 18:52
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.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 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