Am 31.03.2011 um 09:42 schrieb Thomas Tempelmann:

2011/3/31 Klemens Klarhoelter <apple.t...@knetsoft.de>:
TextPosV = floor(G.StringWidth(NthField(Listbox1(tab).cell(i, 1),",,",i1))

Naja. So eine Zeile ist irreführend für einen Aussenseiter mit all dem
Kram darin, der mir nix sagt. Ich kenne doch deinen Code drumherum
nicht. Beschränke dich doch bitte aufs Wesentliche, wenn du um Hilfe
bittest.

Alles, worum es geht ist:
1. StringWidth(s)
2. g
Und g must von dem Graphics-Obj sein, in das du mit DrawString
reinschreibst. Ist das der Fall?

Verdana passt es relativ gut aber bei allen anderen sind die Abweichungen 5-30 Pixel!

Tja, evtl. ist das wirklich so blöde. Keine Ahnung, ich hab das noch
nie dafür verwendet.

Meiner Erfahrung nach funktioniert das recht zuverlässig. Bei kursiven Texten muss man nur beachten, dass .StringWidth die Breite der Fußlinie zurückgibt; d. h. oberhalb der Fußzeile kann der Text noch etwas breiter sein als von der Funktion ermittelt.

Allerdings muss man natürlich die Text-relevanten Eigenschaften des Graphic-Objektes entsprechend einstellen. In dem Beispiel sieht es so aus, als würde Klemens darauf bauen, dass die Formatierung des Strings in der ListBox von .StringWidth beachtet wird. Das ist selbstverständlich nicht der Fall! Also muss vor dem Aufruf von.StringWidth folgendes eingestellt werden:

g.TextFont = ...
g.TextSize = ...
g.bold = ...
g.italic = ...
g.TextUnit = ... (ist glaube ich nur nötig, wenn ein anderes Maßsystem als 'Punkt' für die Schriftgröße verwendet werden soll)

Gruß
Christian


Antwort per Email an