Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TListView mit AutoArrange - Reihnfolge?!? (https://www.delphipraxis.net/166499-tlistview-mit-autoarrange-reihnfolge.html)

ralfiii 15. Feb 2012 17:00

TListView mit AutoArrange - Reihnfolge?!?
 
Hallo!

Ich hab ein TListView das in der IDE schon einen Eintrag enthält.
Wenn nun zur Laufzeit weitere Einträge hinzugefügt werden (mit .Items.add) dann werden die Einträge in verkehrter Reihenfolge dargestellt.
Also angenommen der IDE-Eintrag ist "huhu" und ich füge 1,2 und 3 dann zeigt das ListView
3 2 1 huhu

Ein Insert an's Ende mit
lvPrinters.Items.Insert(lvPrinters.Items.Count+1);
bringt auch nix, selbes Ergebnis.

Copy-paste ich das ListView in ein anderes Projekt, dann funktioniert es einwandfrei.
Füge ich allerdings in dem anderen Projekt einen Eintrag mit dem IDE-Eintragseditor hinzu, dann dreht sich die Reihnfolge aller Elemente im Listview um.
Ich kapier' das nicht!!!
Hilfe!

---

Ah: Gerade gemerkt: Das Problem in der IDE tritt nur auf bei OwnerDraw=True, aber warum macht das einen Unterschied?!?

ralfiii 16. Feb 2012 09:48

AW: TListView mit AutoArrange - Reihnfolge?!?
 
hmmm... hab einen (dirty) Workaround gefunden.

Zum reproduzieren das auf ein Furmular einfügen:

Code:
object ListView1: TListView
  Left = 0
  Top = 0
  Width = 303
  Height = 88
  Align = alTop
  Columns = <>
  IconOptions.AutoArrange = True
  Items.ItemData = {
    03200000000100000000000000FFFFFFFFFFFFFFFF00000000FFFFFFFF000000
    000366006F006F00}
  OwnerDraw = True
  TabOrder = 0
  OnDblClick = ListView1DblClick
  ExplicitWidth = 643
end
und hier der OnDblClick-Event:

Delphi-Quellcode:
procedure TForm1.ListView1DblClick(Sender: TObject);
var lv : TListView;
  listitem : TListItem;
begin
     lv:=Sender as TListView;

     listItem:=lv.Items.Add;
     listItem.Caption:='A';

     listItem:=lv.Items.Add;
     listItem.Caption:='B';

//     lv.IconOptions.AutoArrange:=False;
//     lv.IconOptions.AutoArrange:=True;
end;
Bleiben die letzen beiden Zeilen auskommentiert sieht man genau das Fehlverhalten der ListView. (Nach einem Doppelklick in's ListView steht da "B A foo".
Kommentiert man die Zeilen ein, dann läuft alles wie es soll. ("foo A B")

Wie gesagt, das löst das Problem, aber es ist halt ein Workaround bei dem ich nicht ganz verstehe warum er nötig ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz