Einzelnen Beitrag anzeigen

Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#3

AW: Breite eines Textes exakt bestimmen

  Alt 21. Jun 2010, 20:18
Hallo,

mit dem Problem durfte ich mich vor Kurzem auch beschäftigen, die Lösung lag in der Funktion GetCharABCWidths. Die Funktion liefert Dir ein Array of TABC, auf dem Screen meines Testprogramms kannst Du die Rückgabewerte und die Zusammenhänge sehen. Es gibt aber auch Schriften bei denen ein A-Wert(oder auch C-Wert) im Minusbereich größer ist als ein komplettes Zeichen breit ist, man kann also nicht allein das erste und/oder letzte Zeichen eines Strings betrachten, im Regelfall reicht aber die Auswertung des ersten und letzten Zeichens.
Die Funktion kann man auf zwei Arten verwenden, willst du nur ein Zeichen prüfen reicht eine Dimensionierung auf 0..0, im Beispiel wird der A-Wert des Zeichen 'x' ausgelesen:
Delphi-Quellcode:
var ArrABC: array[0..0] of TABC;
begin
  GetCharABCWidths(Canvas.Handle,Ord('x'),Ord('x'),ArrABC);
  Result := ArrABC[0].abcA;
Man kann aber auch einen Zeichenbereich mit entsprechender Dimensionierung festlegen und beispielsweise so nutzen:
Delphi-Quellcode:
var ArrABC: array[0..25] of TABC;
//
GetCharABCWidths(Canvas.Handle,Ord('A'),Ord('Z'),ArrABC);
Result := ArrABC[1].abcA; //A-Wert des Zeichens 'B'
GetCharABCWidths liefert auch einen Boolean-Wert zurück, daran kann man erkennen ob es True Type ist oder eben nicht.
Miniaturansicht angehängter Grafiken
du-willst-alles-kommt-vor.png  
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )

Geändert von Lannes (21. Jun 2010 um 20:21 Uhr)
  Mit Zitat antworten Zitat