Autor Beitrag
renegi
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 26.04.06 11:34 
Hallo,

ich hänge seit einiger Zeit an diesem Problem fest.

Also, ich habe eine mehrspaltige Listview, die komplett überzeichnet wird (SelectedColor, ...). Der Text wird über DrawText(listview.canvas.handle, ...) ausgegeben.

Die Header sind alle links ausgerichtet und die Daten links oder rechts. Wenn der Benutzer die Spaltenreihenfolge geändert hat, soll es beim nächstem Start auch entsprechend geladen werden. Deshalb nutze ich die ColumnID.

Soweit klappt ja auch alles.

Aber wenn ich eine Spalte verschiebe, werden die Daten in der nächsten Spalte immer rechtsbündig ausgegeben, obwohl meine Funktion GetDirectionbyID den richtigen Wert liefert.

for i := 1 to lvTitle.Columns.Count - 2 do begin
ListView_GetSubItemRect(lvTitle.Handle, Item.Index, i, LVIR_BOUNDS, @R);

s := Item.SubItems[i - 1];
c := DT_VCENTER + DT_END_ELLIPSIS + DT_NOPREFIX;

case GetDirectionbyID(lvTitle.Columns[i].ID) of
0 : c := c + DT_LEFT;
1 : if lvTitle.Canvas.TextWidth(s) > (R.Right - R.Left) then
c := c + DT_LEFT
else
c := c + DT_RIGHT;
end;

DrawText(lvTitle.Canvas.Handle, PChar(s), Length(s), R, c);
end;

Ich habe absolut keine Idee, woran das liegen könnte. Schonmal Danke im Voraus.

mfg renegi