Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
266 Beiträge
 
Turbo Delphi für Win32
 
#31

AW: Text zur Anzeige kürzen mit Punkten hinten

  Alt 2. Nov 2011, 15:03
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.
Angehängte Dateien
Dateityp: zip Ellipsis-Code von himitsu - kompakt v2.zip (125,6 KB, 2x aufgerufen)

Geändert von Guido Eisenbeis ( 2. Nov 2011 um 16:15 Uhr) Grund: Nachtrag und Beispiel-Projekt hinzugefügt.
  Mit Zitat antworten Zitat