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?