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


Anmelden zum Antworten