AGB  ·  Datenschutz  ·  Impressum  







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

ListView: Virtueller Modus

Ein Thema von Nils_13 · begonnen am 4. Jul 2008 · letzter Beitrag vom 4. Jul 2008
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

ListView: Virtueller Modus

  Alt 4. Jul 2008, 16:50
Hi!

Man aktiviert den virtuellen Modus bei einer TListView indem man OwnerData aktiviert. Anschließend muss man den Count setzen und OnData verwenden. Ich habe es so gemacht:
Delphi-Quellcode:
constructor TRazFileManager.Create(aForm : TForm; aSep : String; aViewStyle : TViewStyle);
begin
  LV := TListView.Create(Form);
  with LV do
  begin
    OwnerData := True;
    [...]
  end;
end;

procedure TRazFileManager.Liste(Directory : String; Recursive, ClearList : Boolean);
begin
  [...]
  LV.Items.Count := Succ(Length(DirsFiles));
end;

procedure TRazFileManager.LVData(Sender: TObject; Item: TListItem);
begin
  if Pred(Item.Index) > -1 then
    Item.Caption := DirsFiles[Pred(Item.Index)].Name+' < '+IntToStr(Item.Index);
end;
Die Prozedur Liste befüllt die ListView udn setzt daher am Ende den Count. So wie ich es mache, ist der erste Item.Index -1. Daraus folgt eine sofortige Zugriffsverletzung. Daher die If-Abfrage. Diese If-Abfrage möchte ich vermeiden, denn dank ihr ist der erste Eintrag leer. Alle Einträge sind um eins nach hinten verschoben. Habt ihr einen Tipp, was ich dafür tun muss ?
  Mit Zitat antworten Zitat
marabu

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

Re: ListView: Virtueller Modus

  Alt 4. Jul 2008, 17:09
Hallo Nils,

aus deiner Beschreibung wird für mich nicht deutlich, warum Items.Count auf Succ(Length(DirFiles)) gesetzt wird.
Die Verwendung von Pred() beim Ereignis OnData() erscheint mir auch sehr seltsam.
Erkläre mal ein wenig.

Der Wert von Items.Count darf übrigens erst gesetzt werden, wenn die Daten für OnData() auch wirklich bereit stehen. -1 als Item.Index habe ich noch nie gesehen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: ListView: Virtueller Modus

  Alt 4. Jul 2008, 17:12
Es ist um 1 nach hinten verschoben. Damit nicht das letzte Item wegfällt muss der Count um 1 erhöht werden. Wie die Verschiebung zustande kommt versteh ich nicht.
  Mit Zitat antworten Zitat
marabu

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

Re: ListView: Virtueller Modus

  Alt 4. Jul 2008, 18:00
Mit deiner Verschiebung kann ich nichts anfangen.

DirsFiles scheint mir ein Array zu sein. Die Anzahl der darin enthaltenen Items ist Length(DirsFiles) - mehr geht nicht. Also übernimmst du diesen Wert für die ListItems.

Delphi-Quellcode:
procedure TRazFileManager.Liste(Directory : String; Recursive, ClearList : Boolean);
begin
  [...]
  LV.Items.Count := Length(DirsFiles);
end;

procedure TRazFileManager.LVData(Sender: TObject; Item: TListItem);
begin
  with Item do
  begin
    // bei 0-basiertem Array:
    Caption := Format('%s < %d', [DirsFiles[Index].Name, Index]);
    // ansonsten allgemein:
    Caption := Format('%s < %d', [DirsFiles[Index + Low(DirsFiles)].Name, Index]);
    //SubItems.Add(...);
  end;
end;
So müsste das nach meinem Verständnis aussehen, wenn die Zahl der ListItems mit der Zahl der Items in DirsFiles übereinstimmt.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#5

Re: ListView: Virtueller Modus

  Alt 4. Jul 2008, 22:05
Habe lange gebraucht um meinen Fehler zu sehen: Vorher habe ich noch andere Einträge hinzugefügt, wie man es gewöhnlich tut. Danke, denn dank deines Codes konnte ich den Fehler finden, da dein Code nicht funktionierte und bei fast allen Benutzern des Forums drübersteht, wenn er eventuell nicht ganz funktioniert.
  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:50 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