Thema: Delphi String mit ... abkürzen

Einzelnen Beitrag anzeigen

Nuclear-Ping
(Gast)

n/a Beiträge
 
#7

Re: String mit ... abkürzen

  Alt 20. Mär 2008, 14:33
Hab auch grad das Problem. Allerdings funktioniert das mit DrawText nicht so recht ...

Ich habe einen langen Text, der in ein TRect gezeichnet werden soll. Funktioniert auch. Nur will ich den Text, der über die Grenzen des Rect geht, mit "..." abschneiden.

Hier hab ich ein Beispiel gefunden: http://vbnet.mvps.org/index.html?cod...strellipse.htm
Da macht er es so, dass er DrawText mit DT_CALCRECT or DT_MODIFYSTRING or DT_PATH_ELLIPSIS (oder DT_END_ELLIPSIS) aufruft, was scheinbar den modifizierten Text in die Variable zurückpackt. Funktioniert hier aber nicht ...

Delphi-Quellcode:
var
  colStr: PChar;
  Rect: TRect;
  x, y: Integer;
begin
  x := Item.Left - 4;
  y := Item.Top;
  for a := 0 to SubItem - 1 do
    x := x + FListView.Columns[a].Width;

  Rect.Left := x + 2;
  Rect.Top := y + 2;
  Rect.Bottom := y + FListView.SmallImages.Height - 2;
  Rect.Right := x + FListView.Columns[SubItem].Width - 2;

  GetMem (colStr, Length (Item.SubItems[SubItem - 1]));
  try
    StrPCopy (colStr, Item.SubItems[SubItem - 1]);
    DrawText (FListView.Canvas.Handle, colStr, Length (colStr),
              Rect, DT_CALCRECT or
                    DT_WORDBREAK or
                    DT_MODIFYSTRING or
                    DT_WORD_ELLIPSIS or
                    DT_NOPREFIX);
    DrawText (FListView.Canvas.Handle, colStr, Length (colStr),
              Rect, DT_WORDBREAK or
                    DT_NOPREFIX);
  finally
    FreeMem (colStr);
  end;
end;
colStr bleibt unverändert, auch wenn ich nur DrawText 1x aufrufe ohne DT_CALCRECT. Was mach ich falsch?
  Mit Zitat antworten Zitat