AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Zeichnungsgröße in Metafile fällt je Rechner anders aus?!
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichnungsgröße in Metafile fällt je Rechner anders aus?!

Ein Thema von Jelen · begonnen am 3. Mär 2010 · letzter Beitrag vom 4. Mär 2010
 
Jelen

Registriert seit: 5. Nov 2003
45 Beiträge
 
#3

Re: Zeichnungsgröße in Metafile fällt je Rechner anders aus?

  Alt 4. Mär 2010, 10:38
Danke für den Tipp.
Die darin beschriebene Vorgehensweise erfordert aber Windows Vista - das ist mir noch erspart geblieben.

Mit dem Gerätekontext-Handle bin ich inzwischen aber doch weitergekommen:
Da meine Anwendung seine Ausgabe sowieso auf den Druckbereich eines bestimmten Druckers hin formatiert (WYSIWYG), gebe ich dem Metafile das Handle des Druckers mit auf den Weg.
Wenn dann die Ausgabe noch gemäß der Druckerauflösung skaliert wird, bekomme ich auf beiden Rechnern dasgleiche Ergebnis !

Der Quelltext dazu sieht jetzt so aus:

Delphi-Quellcode:
procedure TForm1.MetafileBtnClick(Sender: TObject);
 var DpiX,DpiY,i,SeiBreimm,SeiHoehmm,Seitenbreite,Seitenhoehe: integer;
     Pict: TPicture;
     mfc: TMetafileCanvas;

 function KoorUmr (Wert: integer): integer;
  begin
   Result := round(Wert/96*DpiX);
  end;

 begin
  { Druckparameter ermitteln }
  Printer.SetPrinter
   (PChar('Samsung CLP-300 Series'),PChar('WINSPOOL'),PChar(''),0);
  Printer.Orientation := poLandscape;
  Seitenbreite := Printer.PageWidth; { in Pixel }
  Seitenhoehe := Printer.PageHeight; { in Pixel }
  DpiX := GetDeviceCaps(Printer.Handle,LogPixelsX); { Druckerauflösung }
  DpiY := GetDeviceCaps(Printer.Handle,LogPixelsY);
  SeiBreimm := round(Seitenbreite/DpiX*2540); { Breite in 0.01 mm }
  SeiHoehmm := round(Seitenhoehe/DpiY*2540); { Höhe in 0.01 mm }
  { Metafile erzeugen }
  Pict := TPicture.Create;
  Pict.Metafile.MMWidth := SeiBreimm;
  Pict.Metafile.MMHeight := SeiHoehmm;
  Pict.Metafile.Inch := DpiX;
  mfc := TMetafileCanvas.Create(Pict.Metafile,Printer.Handle);
  { Beispielzeichnung ausgeben }
  mfc.Brush.Color := clRed;
  mfc.Ellipse(KoorUmr(340),KoorUmr(300),KoorUmr(440),KoorUmr(600));
  mfc.Brush.Color := clWhite;
  mfc.Font.Name := 'Arial';
  mfc.Font.Height := -KoorUmr(30);
  for i := 1 to 10
  do mfc.TextOut(KoorUmr(50),i*KoorUmr(50),'Text auf (50,'+IntToStr(i*50)+')');
  mfc.Font.Name := 'Courier New';
  mfc.Font.Size := KoorUmr(20);
  for i := 1 to 10
  do mfc.TextOut(KoorUmr(500),i*KoorUmr(50),'Text auf (500,'+IntToStr(i*50)+')');
  mfc.TextOut(KoorUmr(50),KoorUmr(550),'Inch='+IntToStr(Pict.Metafile.Inch));
  mfc.TextOut(KoorUmr(50),KoorUmr(600),'Width='+IntToStr(Pict.Metafile.Width));
  mfc.TextOut(KoorUmr(50),KoorUmr(650),'Height='+IntToStr(Pict.Metafile.Height));
  { Ende Beispielzeichnung }
  mfc.Free;
  Pict.Metafile.SaveToFile('MFTest.wmf');
  Pict.Free;
 end;
Die Ergebnisse stimmen auch unabhängig vom gewählten Drucker überein (bis auf die Blattgröße natürlich).
Komischerweise stimmen die Werte Pict.Metafile.Width und Height nicht. Bei Verwendung des wmf in anderen Programmen (z.B. Einfügen in Word-Dokument) stört das aber nicht.
  Mit Zitat antworten Zitat
 


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 13:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz