Das Problem mit dem Umlauten liegt jedenfalls an Lazarus, mit Delphi geht es problemlos.
Klar, hab ich ja auch geschrieben:
"... die Funktion von himitsu in Lazarus ..." . . Dennoch danke für die Bestätigung.
... Eine UTF-8-Variante wird es von DrawTextEx wohl nicht geben? (Von Windows nicht, es sei denn man stellt UTF-8 als DefaultCodepage ein oder Lazarus konvertiert es nach
Unicode) ...
Ich hab jetzt einige Variationen mit WideString, Unicodestring, UTF8..., usw. probiert, hat sich aber nichts getan. Ich vermute auch viel eher, dass da in der
IDE selbst eine Schalter ist, um das einzustellen. Ich hab schon einiges durchsucht (und probiert), aber das ist die sprichwörtliche "Naddel" im Heuhaufen. Wenn da ein Lazarus-Fachmann mitliest, wird er das wahrscheinlich als Kleinigkeit ansehen!?
Auf jeden Fall wird z. B. das "ü" intern ("Lokale Variablen"-Fenster) als "#195#188" angezeigt. Wird nun um ein Zeichen gekürzt, steht da noch "#195". Es wird also intern das "halbe ü" weggenommen, was im String als "?" dargestellt wird.
Guido.
Nachtrag:
OK, hab jetzt Folgedes herausgefunden:
Delphi-Quellcode:
function GetEllipsisText(
Handle: HDC; S:
String; MaxWidth: Integer; MaxHeight: Integer = 0;
PathEllipsis: Boolean = False; TextFormat: LongWord = 0):
String;
var
R: TRect;
begin
Result := UTF8ToAnsi(S);
// <-- Konvertieren zu Ansi ...
UniqueString(Result);
if MaxHeight <= 0
then
MaxHeight := 1000;
R := Classes.Rect(1, 1, MaxWidth, MaxHeight);
TextFormat := TextFormat
or DT_CALCRECT
or DT_MODIFYSTRING;
if PathEllipsis
then
TextFormat := TextFormat
or DT_PATH_ELLIPSIS;
if TextFormat
and (DT_END_ELLIPSIS
or DT_PATH_ELLIPSIS) = 0
then
TextFormat := TextFormat
or DT_END_ELLIPSIS;
DrawTextEx(
Handle, PChar(Result), Length(Result), R, TextFormat,
nil);
SetLength(Result, StrLen(PChar(Result)));
Result := AnsiToUTF8(Result);
// <-- und zurück.
end;
Kann das jemand testen?
Guido.