Entwickler-Ecke

Multimedia / Grafik - TextWidth liefert falsche Werte


mwawra - Fr 15.07.05 22:39
Titel: TextWidth liefert falsche Werte
Ich spiele mich schon ewig mit dem Problem herum, daß die von TextWidth gelieferten Werte nicht der Realität entsprechen.

Konkret:

Delphi-Quelltext
1:
2:
3:
Font.Name := 'Lucida Sans Unicode' ; 
Font.Height := 40 ; 
Font.Style := [] ;


TextWidth liefert Ergebnisse welche grob (80%) danebenliegen.

Änderungen der Fontgröße ergeben in einem großen Bereich (Height = 40, Height = 50) den gleichen Wert.

Was läuft da falsch ?

Kann es sein, daß bestimmte Fonts nicht feiner skalierbar sind ?

Wer weiß was darüber ?

Danke für Tipps

Manfred

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt.


maxk - Fr 15.07.05 22:50

Hallo und :welcome: im DF!
Das kommt bei mir sehr genau hin :? Hast du evtl. versehentlich Font, statt Canvas.Font geändert?

Gruß,
maxk


mwawra - Sa 16.07.05 01:20

Hallo,

danke fürs Willkommen und für die Antwort.

Ich wollte nicht den ganzen Sermon hinschreiben. Natürlich habe ich vom relevanten Canvas den Font entsprechend gesetzt, und von diesem Canvas Textwidth aufgerufen. Bei manchen Fontgrößen kommt der Wert auch sehr genau, bei anderen eben wie gesagt total daneben. Ich muß noch probieren, ob es bei einem anderen Font (z.B. Arial) besser klappt.


maxk - Sa 16.07.05 10:20

Ich habe es gestern mit deiner Einstellung (oben) probiert und das hat wunderbar funktioniert - die meintest du doch als Beispiel, oder?


mwawra - Sa 16.07.05 17:36

Hallo maxk,

ich glaube das Problem besteht darin, daß ich für die Ausgabe das Canvas umsetze:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  ziel    : TCanvas ;
  mypanel : TMyWinControl ; (* Abgeleitete Klasse aus TWinControl *)

  setmapmode(ziel.handle, mm_anisotropic) ;
  SetWindowExtEX(ziel.handle, druckbreite, druckhoehe, nil) ;
  SetViewportExtEX(ziel.handle, MyPanel.width, MyPanel.height, nil) ;


Wenn ich auf diesem transformierten Canvas TextWidth berechne kommen falsche Werte heraus.

Ich habe mir jetzt ein temporäres Bitmap erzeugt, auf dessen Canvas ich die TextWidth Berechnung mache. Diese Ergebnisse stimmen.

Danke fürs probieren und helfen

Manfred

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt.