AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Virtuelles ListView + GetNextItem

Ein Thema von tigerman33 · begonnen am 24. Mär 2006 · letzter Beitrag vom 24. Mär 2006
Antwort Antwort
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#1

Virtuelles ListView + GetNextItem

  Alt 24. Mär 2006, 10:13
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
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Virtuelles ListView + GetNextItem

  Alt 24. Mär 2006, 10:38
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
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#3

Re: Virtuelles ListView + GetNextItem

  Alt 24. Mär 2006, 10:40
Delphi-Quellcode:
...
  for i := 0 to lvTasks.SelCount - 1 do begin '<----------------------
...
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Virtuelles ListView + GetNextItem

  Alt 24. Mär 2006, 13:03
Hallo,

danke Marabu, so funktioniert es einwandfrei. 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
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 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