Nicht falsch verstehen aber so wie du deinen Buchstaben zusammenbastelst könnten einem die Augen tränen.
Es geht auch viel einfacher und du musst dann keine Umwandlungen über Integer machen. Mit #dezialwert definierst du ein Zeichen anhand eines Dezimalwertes. Mit #$hexwert definierst du ein Zeichen anhand eines Hexwertes.
Delphi-Quellcode:
String := #$EF#$C8#$83;
// oder
String := #$EF + #$C8 + #$83;
Beides ist gleich nur, dass das untere Besser zu lesen ist. Aber bei beiden Methoden handelt es sich um einen konstanten String. In deinem Beispiel muss erst mittels Code der String erzeugt werden.
Hast du mal geschaut was nach
UTF8Decode raus kommt. Ob da auch wirklich dein Wert enthalten ist? Wenn das UTF-8 stimmt, dann sollte es aber. Und stelle bitte ganz sicher, dass du auch das entsprechende Font benutzt. Im Falle eines nicht findens nimmt Windows ein anderes. Wenn das dann ausgerechnet Arial ist, dann merkt man den Unterschied kaum bzw nur dann wenn Zeichen fehlen.
Zitat von
msdn:
If nCount is 1, then the lpString parameter is assumed to be a pointer to a null-terminated string and DrawText computes the character count automatically.
Diese Passage sollte bei dir zutreffen, da du nur ein einziges Zeichen hast. Im Label wird der String mit
@String[1] übergeben. Ich meine mich daran zu erinnern, dass es mit @Blah[1] durchaus passieren kann, dass am Ende des Textes kein explizites #0 hängt. Wenn man den Pointer eines WideStrings mit
pWideChar(WideString) ermittelt sorgt Delphi meines Wissens nach dafür, dass dort ein #0 anhängt. Ich muss aber gestehen ich bin mir nicht ganz sicher mit dem @Blah[1]. Ich arbeite immer mit dem anderen Weg. Im Zweifel nimm mal testweise dein Zeichen doppelt.
Sonst wüsste ich nicht was es sein könnte. Eigentlich ist das alles ja auch nicht so komplex.