Bug in TListView->Columns->Item[0]?
-
Hi.
Ich füge in mein Projekt ein TListView, gehe auf Columns und füge dort mehrere Items ein. Jetzt gehe ich zum ersten in der Liste und will Alignment auf Center oder Right stellen, aber er stellt es automatisch umgehend auf Left zurück. Dieses seltsame Verhalten macht er nur beim aller ersten im BCB5. Ist das gewollt?
Ich kann es auch nicht über Quelltext beeinflussen
ListView->Columns->Items[0]->Alignment = taRightJustify;Ich kann nur tricksen indem ich das Caption "" setze mit Width = 1 und nur mit den SubItems arbeite, was etwas doof ist, aber ich brauch das erste rechtsgerichtet.

Gibts dafür vielleicht nen Bugfix?
-
Dies scheint so gewollt zu sein (bzw. unterstützt das Win32-Control dies nicht anders).
Hier der zugehörige (Delphi) Source-Code:procedure TListColumn.SetAlignment(Value: TAlignment); begin if (Alignment <> Value) and (Index <> 0) then begin FAlignment := Value; Changed(False); TListColumns(Collection).Owner.Repaint; end; end;Du kannst aber dann die Breite der ersten Spalte auf 0 setzen.
-
Ansonsten könntest du auch das Zeichnen selber vornehmen (OwnerDraw = true) und dann auf die entsprechenden Ereignisse OnDrawItem, OnAdvancedCustomDraw, OnCustomDraw... reagieren und den Text dann selber rechts ausrichten.
-
@Alignment
Man kann Width leider nur auf mind. 1 setzen.
Ich verstehe aber nicht warum das so "gewollt" sein sollte.Es müsste gehen wenn ich die Komponente ableite und SetAlignment überschreibe, oder?
-
Hallo
Wie schon gesagt ist das Problem nicht TListView, sondern das zugrundeliegende WinAPI-Control. Das erlaubt offenbar nicht die erste Spalte anders auszurichten, vermutlich weil die MS-Entwickler davon ausgingen das in der ersten Spalte Namen (also Texte) stehen die immer links ausgerichtet werden.
Das Ableiten wird da auch nichts bringen, vermutlich ist SetAlignment nicht mal virtual.
bis bald
akari