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.