Ich habe das gerade mal getestet und bekomme hier ein richtiges Ergebnis. Kopiere mal den folgenden Code in den Paint-Event eines ansonsten leeren Fensters. Der der Text sollte rechtsbündig ausgerichtet sein und einen Abstand von 20 Pixel zur rechten Kante des Fensters haben. Wie sieht das Ergebnis bei Dir aus?

Ach ja, ich verwende Rb 2009r5.1.


  const text = "Ich bin ein Text."

  g.TextSize = 12
  g.TextUnit = FontUnits.point
  g.bold = false
  g.italic = false


  // TextFont = "Courier"
  g.TextFont = "Courier"
  g.DrawString text, self.width -g.StringWidth(text) -20, 50
  dim i1 as Integer = g.StringWidth(text)

  // TextFont = "Arial"
  g.TextFont = "Arial"
  g.DrawString text, self.width -g.StringWidth(text) -20, 75
  dim i2 as Integer = g.StringWidth(text)

  // TextFont = "System"
  g.TextFont = "System"
  g.DrawString text, self.width -g.StringWidth(text) -20, 100
  dim i3 as Integer = g.StringWidth(text)


// Die Breite der 3 Test-Strings in der Titelzeile des Fensters ausgeben
  self.title = Str(i1) +" / " +Str(i2) +" / " +Str(i3)



Gruß
Christian



Am 31.03.2011 um 14:49 schrieb Klemens Klarhoelter:

Hallo Christian,

danke für den Tipp aber die Schriftart etc. wird übergeben.
Ich habe mir die Werte im Debugger angeschaut und man sieht,
das die Formatierung nicht berücksichtigt wird.
Ich habe eine Länge von 129 Pixel bei der Schriftart Courier und wenn
ich auf Arial umschalte auch 129 Pixel. Bei Arial muß es weniger sein.
Die Schriftart wird korrekt dargestellt, aber da der Startpunkt links immer
der gleiche passt es rechts nicht mehr.
Ist es so schwer ein Text im Graphics auszurichten?

Gruß
Klemens
Am 31.03.2011 um 10:19 schrieb Christian Dorn:

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



Klemens Klarhoelter-Selbst













Antwort per Email an