Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Listview sortieren: Makevisible(False) (https://www.delphipraxis.net/57237-listview-sortieren-makevisible-false.html)

lucius 17. Nov 2005 15:53


Listview sortieren: Makevisible(False)
 
Hallo Leute,
Ich probiere eine Art Sortierung fuer meine Listview zu bauen.
In der 3ten Spalte stehen die Werte wonach geguckt werden soll.
Die Werten koennen sein:
Zitat:

Film - DVD Film - SVCD Games - Console unsw
Jetzt moechte ich es hinkriegen das wenn ich zb ne Checkbox anklicke das nur die Film - DVD Werte in der Listview zu sehen sind.
Jetzt wollte ich das mit MakeVisible() hinkriegen aber es klappt nicht ganz.
MakeVisible und nicht Delete denn die andere Werte sollen in der LV drin bleiben aber nicht zu sehen sein.
Delphi-Quellcode:
procedure Form.SortierClick(Sender: TObject);
var
listitem : TListItem;
i: integer;
begin
   for i := 0 to listview.Items.Count -1 do
     begin
       if listitem.SubItems[1] = 'Films - DVDr' then
       begin
       Listview.Items.Item[i].MakeVisible(False);
       end;
     end;
end;
PS: Es handelt sich hier um keine Virtuellen Listview.
Recht herzlichen Dank.

Luckie 17. Nov 2005 16:19

Re: Listview sortieren: Makevisible(False)
 
Lösche die Einträge. Der Listview sollte nicht zur Datenhaltung, sondern nur zur Visualisierung verwendet werden. Damit trennst du dann auch OOP konform doe Daten von der Oberfläche.

lucius 17. Nov 2005 16:56

Re: Listview sortieren: Makevisible(False)
 
Hi Lucki,
Delphi-Quellcode:
procedure TDemoForm.Button6Click(Sender: TObject);
var
listitem : TListItem;
i: integer;
begin
for i := 0 to listview.Items.Count -1 do
begin
if listitem.SubItems[1] = 'Films - DVDr' then <----- AccesViolation
     begin
     Listview.Items.Item[i].Delete;
     end;
end;
end;
Hat jemand nen Vorschlag?

Luckie 17. Nov 2005 17:11

Re: Listview sortieren: Makevisible(False)
 
Bei einer for-Schleife wird die Bedingung im Schleifenkopf nur einmal überprüft. Wenn du jetzt einen Eintrag löscht, läuft die Schleife zu weit und es kracht. Lösung: Lass die Schleife rückwärte mit Delphi-Referenz durchsuchendownto laufen.

lucius 17. Nov 2005 17:23

Re: Listview sortieren: Makevisible(False)
 
Hmmm Lucki,
Delphi-Quellcode:
procedure TDemoForm.Button6Click(Sender: TObject);
var
listitem : TListItem;
i: integer;
begin
for i := pred(listview.Items.Count) downto 0 do
begin
if listitem.SubItems[1] = 'Films - DVDr' then <------------- hier stimmt was nicht.
     begin
     Listview.Items.Item[i].Delete;
     end;
end;
end;

Luckie 17. Nov 2005 17:26

Re: Listview sortieren: Makevisible(False)
 
Zitat:

Zitat von lucius
Hmmm Lucki,
Delphi-Quellcode:
if listitem.SubItems[1] = 'Films - DVDr' then <------------- hier stimmt was nicht.

Und woher soll ich jetzt, ohne Glaskugel, wissen, was das nicht stimmt. :evil:

lucius 17. Nov 2005 17:35

Re: Listview sortieren: Makevisible(False)
 
Ja sry Lucki,
Zitat:

if listitem.SubItems[1] = 'Films - DVDr' then <------------- hier stimmt was nicht.
Die Subitems Films - DVDr stehen in der 3e Spalte von der Listview.
Wie greife ich in den Loop darauf zu?
Er gibt den Fehler in listitem.SubItems[1].

Gruss Lucius.

Luckie 17. Nov 2005 17:36

Re: Listview sortieren: Makevisible(False)
 
Wenn es die dritte Spalte ist, warum gibst du denn dann als Index 1 ein? Etwas mehr nachdenken beim Programmieren bitte.

lucius 17. Nov 2005 17:42

Re: Listview sortieren: Makevisible(False)
 
Sorry Lucki das ich deine Zeit verplempere.
Zitat:

listitem.SubItems[1] = 'Films - DVDr'
Ist schon gut so, bei CustomDrawItem gehts, aber die ganze loop stimmt nicht.
Ich gebe es auf.

idontwantaname 17. Nov 2005 19:38

Re: Listview sortieren: Makevisible(False)
 
nur so ne frage, wo weißt du listitem zu ?
ich quellcode find ich nirgends ein "listitem := listview.items[i];" oder ähnliches

Lannes 17. Nov 2005 20:43

Re: Listview sortieren: Makevisible(False)
 
Hallo,

SubItems[1] ist schon richtig :wink:

Code:
Spalte 1 | Spalte 2    | Spalte 3    |
Caption | SubItems[0] | SubItems[1] |
1. mit Zuweisung der Items
Delphi-Quellcode:
var z : Integer;
    aItem : TListItem;
begin
  for z := ListView1.Items.Count-1 downto 0 do
    begin
    aItem := ListView1.Items[z];
    if aItem.SubItems[1] <> 'Delphi' then
      aItem.Delete;
    end;
2. ohne Zuweisung
Delphi-Quellcode:
var z : Integer;
begin
  for z := ListView1.Items.Count-1 downto 0 do
    if ListView1.Items[z].SubItems[1] <> 'Delphi' then
      ListView1.Items[z].Delete;

lucius 17. Nov 2005 21:03

Re: Listview sortieren: Makevisible(False)
 
Klapt wunderbar Lannes, vielen herzlichen Dank an dir.
Jetzt noch die Frage wie mach ich das die Listitems die deleted wurden wieder in der Listview sichtbar sind?
Delphi-Quellcode:
procedure THaupt.MusikClick(Sender: TObject);
var z : Integer;
begin
if Musik.Checked = false then
begin
  for z := ListView.Items.Count-1 downto 0 do
    if ListView.Items[z].SubItems[1] = 'Musik - Album' then
      ListView.Items[z].Delete;
end
else
...... <---- wieder sichtbar machen.
Auch die anderen Danke fuer eure Antworten.

Gruss Lucius..

lucius 18. Nov 2005 09:43

Re: Listview sortieren: Makevisible(False)
 
Denn ich glaube die items die mit ListView.Items[z].Delete geloescht wurden sind fuer immer weg oder?

Gruss Lucius.

Luckie 18. Nov 2005 10:58

Re: Listview sortieren: Makevisible(False)
 
Jupp. Einfach wieder aus der Datenmenge holen und einfügen, deswegen solltest du ja den Listview nicht zur Datenhltung missbrauchen.


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