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/)
-   -   Delphi Virtuelles ListView + GetNextItem (https://www.delphipraxis.net/66067-virtuelles-listview-getnextitem.html)

tigerman33 24. Mär 2006 09:13


Virtuelles ListView + GetNextItem
 
Guten Morgen DP'ler,

ich habe ein Problem mit einem virtuellen Listview (sprich OwnerData = true). MultiSelect steht auf true. In diesem versuche ich nun mittels folgendem Code alle ausgewählten Einträge in ein Array zu bekommen:
Delphi-Quellcode:
var i: integer;
    Selection: array of TListItem;
    Item: TListItem;

...

  Item := nil;
  SetLength(Selection, lvTasks.SelCount);
  with lvTasks do
    for i := 0 to SelCount - 1 do begin
      Item := GetNextItem(Item, sdBelow, [isSelected]);
      Selection[i] := Item;
    end;
Seltsamerweise liefert mir GetNextItem jedoch immer nur nil zurück. Einzige Ausnahme: Wenn ich sdBelow durch sdAll ersetze. Dann krieg ich aber immer nur den gleichen Eintrag zurück, das bringt mich auch nicht wesentlich weiter.
In einem Testprojekt mit nicht-virtuellem ListView funktioniert alles einwandfrei, deswegen vermute ich, dass es am OwnerData liegt.

Gruß
Christian

marabu 24. Mär 2006 09:38

Re: Virtuelles ListView + GetNextItem
 
Hallo Christian,

bei einer virtuellen ListView interessiert dich nur der Index des Items. Das Item darf nicht mit NIL initialisiert werden. sdAll ist in deinem Fall vielleicht besser als sdBelow. Du brauchst keine FOR-Schleife, wenn du GetNextItem() verwendest. ...

Delphi-Quellcode:
uses
  Types;

var
  i: integer;
  sel: TIntegerDynArray;
  item: TListItem;

begin
  // ...
  with lvTasks do
  begin
    SetLength(sel, lvTasks.SelCount);
    item := Selected;
    i := 0;
    while Assigned(item) do
    begin
      sel[i] := item.Index;
      Inc(i);
      item := GetNextItem(item, sdAll, [isSelected]);
    end;
  end;
  // ...
end;
Getippt und nicht getestet.

Grüße vom marabu

ibp 24. Mär 2006 09:40

Re: Virtuelles ListView + GetNextItem
 
Delphi-Quellcode:
...
  for i := 0 to lvTasks.SelCount - 1 do begin  '<----------------------
...

tigerman33 24. Mär 2006 12:03

Re: Virtuelles ListView + GetNextItem
 
Hallo,

danke Marabu, so funktioniert es einwandfrei. :thumb: Warum mein Code nicht funktioniert hat ist mir allerdings immer noch nicht ganz klar, denn die Initialisierung Item := nil bewirkt ja nur, dass vom Anfang an gesucht wird (Startindex -1). Dein Code funktioniert übrigens seltsamerweise auch mit sdBelow statt sdAll.
Der einzige Grund warum ich mir die Items gemerkt hab war übrigens um anschließend auf ihre Indizes zuzugreifen--da hast du natürlich recht, es ist eleganter sich dann auch nur diese zu "merken".

@ibp:
Was meinst du damit?

Jedenfalls thx@all
Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 18: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