AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Druck in TMetafile > (manchmal) fehlerhafte Textdarstellung

Druck in TMetafile > (manchmal) fehlerhafte Textdarstellung

Ein Thema von bernau · begonnen am 18. Jan 2023 · letzter Beitrag vom 19. Jan 2023
Antwort Antwort
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Druck in TMetafile > (manchmal) fehlerhafte Textdarstellung

  Alt 18. Jan 2023, 10:10
In manchen Situationen zeichne ich einen Text nicht direkt auf den Canvas, sondern ich zeichne erst einmal in ein TMetafile und dieses wird bei Bedarf auf den Canvas gezeichnet. Nun habe ich 2 Fälle in denen der Text nicht korrekt dargestellt wird. Das passiert aber nur auf dem Computer des Kunden (Zwei verschiedene Kunden).

Am Programm dürfte es nicht liegen, da die Darstellung eigentlich immer OK ist. Bis auf diese 2 Computer (Win11).

Ich habe mal ein kleines Testprogramm geschrieben, mit dem ich den Fehler darstellen kann.

Delphi-Quellcode:
unit ccMetafileTest.Hf;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  Vcl.ExtCtrls;

type
  TFormMetafileTest = class(TForm)
    PaintBox1: TPaintBox;
    procedure PaintBox1Paint(Sender: TObject);
  private
    function PaintTextToCanvas(const aCanvas: TCanvas; const aX, aY: Integer; const aFontName:String): TRect;
    Procedure PaintAll(const aCanvas: TCanvas);
  public

  end;

var
  FormMetafileTest: TFormMetafileTest;

implementation

{$R *.dfm}

procedure TFormMetafileTest.PaintBox1Paint(Sender: TObject);
begin
  PaintAll(PaintBox1.Canvas);
end;

procedure TFormMetafileTest.PaintAll(const aCanvas: TCanvas);
var
  lMetafile: TMetafile;
  lMetafileCanvas: TMetafileCanvas;
  lRect:TRect;
begin
  //***************************************************
  // Direkt auf den Canvas zeichnen (Test oben Links)
  PaintTextToCanvas(aCanvas, 0, 0,'Arial');
  //***************************************************
  // Direkt auf den Canvas zeichnen (Test oben Rechts)
  PaintTextToCanvas(aCanvas, 300, 0,'Courier New');

  //***************************************************
  // Umweg über TMetafile (Text unten links)
  lMetafile := TMetafile.Create;
  lMetafile.SetSize(1000,1000);

  lMetafileCanvas := TMetafileCanvas.Create(lMetafile,acanvas.Handle);
  lRect := PaintTextToCanvas(lMetafileCanvas, 0, 0,'Arial');
  lMetafileCanvas.Free;

  lRect := Trect.Create(TPoint.Create(0,70),1000,1000);
  aCanvas.StretchDraw(lRect, lMetaFile);
  lMetafile.Free;

  //***************************************************
  // Umweg über TMetafile (Text unten Rechts)
  lMetafile := TMetafile.Create;
  lMetafile.SetSize(1000,1000);

  lMetafileCanvas := TMetafileCanvas.Create(lMetafile,acanvas.Handle);
  lRect := PaintTextToCanvas(lMetafileCanvas, 0, 0,'Courier New');
  lMetafileCanvas.Free;

  lRect := Trect.Create(TPoint.Create(300,70),1000,1000);
  aCanvas.StretchDraw(lRect, lMetaFile);
  lMetafile.Free;
end;

function TFormMetafileTest.PaintTextToCanvas(const aCanvas: TCanvas; const aX, aY: Integer; const aFontName:String): TRect;
var
  lText:String;
begin
  lText :='ABCDEabcde';
  aCanvas.font.name := aFontName;
  aCanvas.font.Height := 50;

  Result.Left :=aX;
  Result.Top :=aY;

  Result.Width := aCanvas.TextWidth(lText);
  Result.Height := aCanvas.TextHeight(lText);

  aCanvas.Brush.Style := bsSolid;
  aCanvas.Brush.Color := clRed;
  aCanvas.Rectangle(aX, aY, aX + Result.Width, aY + Result.Height);

  aCanvas.Brush.Style := bsClear;
  aCanvas.TextOut(aX, aY, lText);
end;

end.
In den Anhängen sieht man einmal die korrekte Darstellung und einmal die Fehlerhafte Darstellung. Die oberen zwei Texte werden immer korrekt dargestellt, weil direkt auf den Canvas gezeichnet wird. Die unteren beiden Text sind einmal korrekt und einmal fehlerhaft.

Ich dachte zuerst, es liegt an einem fehlerhaften Font (beim Kunde). Deshalb jeweils zwei Texte mit unterschiedlichem Font um diese Annahme auszuschliessen. Dann dachte ich, es liegt an der Bildschirmscalierung (150%). Fehlanzeige.

Bin mir sehr sicher, dass es an eine dummen Einstellung des Computers liegt. Aber wo soll ich suchen?
Miniaturansicht angehängter Grafiken
fonttestohnefehler.png   fonttestmitfehler.png  
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de

Geändert von bernau (18. Jan 2023 um 10:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
614 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Druck in TMetafile > (manchmal) fehlerhafte Textdarstellung

  Alt 18. Jan 2023, 10:29
Nach ändern der Bildschirm Scalierung neu gestartet? Nicht dass da was nicht mitbekommt das was geändert wurde.
Es gibt in den Barierefrei Einstellungen noch was nur für die Schriftgröße / Schriftstil (Win 10, frag mich nicht wo, ist einige Jahre her). Da schon geguckt?
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Druck in TMetafile > (manchmal) fehlerhafte Textdarstellung

  Alt 18. Jan 2023, 11:48
Nach ändern der Bildschirm Scalierung neu gestartet? Nicht dass da was nicht mitbekommt das was geändert wurde.
War von vornherein bei beiden auf 100% eingestellt. War nur eine Vermutung, dass es mit der Skalierung zu tun hat.

Es gibt in den Barierefrei Einstellungen noch was nur für die Schriftgröße / Schriftstil (Win 10, frag mich nicht wo, ist einige Jahre her). Da schon geguckt?
Guter Hinweis. Ich schaue mal nach.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Druck in TMetafile > (manchmal) fehlerhafte Textdarstellung

  Alt 18. Jan 2023, 11:51
Hier mal das fertig kompilierte Programm. Falls jemand auf die Schnelle testen möchte.
Angehängte Dateien
Dateityp: zip ccMetafileTest.zip (894,2 KB, 14x aufgerufen)
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
961 Beiträge
 
Delphi 6 Professional
 
#5

AW: Druck in TMetafile > (manchmal) fehlerhafte Textdarstellung

  Alt 19. Jan 2023, 07:52
Hmm..

War es bei den MetaFiles nicht so, dass der Text wie ein PS-Script in der Datei abgelegt wird, also nicht als z.B. Bitmap?

Dann könnte die unterschiedliche Darstellung auch daran liegen, dass auf den Kundenrechnern nicht die auf deinem Rechner für den Text verwendete Schriftart installiert ist und deshalb eine andere Schrift als 'Ersatz' verwendet wird. Dies passiert auch unter Word, wenn der Font nicht embeddet ist..

Edit:
Sorry, zu spät gesehen, dass du diesen Grund schon ausgeschlossen hattest...
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09: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