Wechsel von ListView zu VirtualStringTree

8

Ich versuche, meine Projekte mit einem VirtualStringTree statt einem Listview zu erstellen, wegen der großen Geschwindigkeitsdifferenz. Die Sache ist, selbst nachdem ich durch die Demos gesehen habe, kann ich einfach nicht genau herausfinden, wie ich es als ListView verwenden würde. Das Hinzufügen, Löschen und im Grunde nur das Arbeiten mit ListView-Elementen ist so einfach, aber wenn ich mir die VT anschaue, wird es fast zu kompliziert.

Alles was ich suche, ist ein VT, der wie ein ListView aussieht, mit Unterpunkten etc.

Hier sind einige Routinen, die die ListView verwenden, die ich gerne mit VT benutzen würde (Dies ist nur ein Pseudo-Beispiel:

%Vor%

Natürlich, auch die Delete-Funktion, aber da das wie 1 Zeile ist, habe ich nicht gestört: P

Könnte jemand die obigen Beispiele in eine ListView-Stil-VT übersetzen?

Danke!

    
Jeff 03.01.2011, 17:38
quelle

5 Antworten

4
%Vor%

Das ist im Grunde das, was Sie tun müssen, aber der VirtualStringTree braucht / braucht viele andere Dinge, um das Ganze zu verstehen. Und wenn Sie es einmal verstanden haben, ist das VST einfach und leistungsstark. Die folgende Webseite wird Ihnen helfen: Ссылка

und unten werde ich mehr Code hinzufügen, den ich für eine einfache VST-Log-Anzeige verwende. Ich behalte den ganzen Code im Datamodul, benutze einfach die Prozedur Log, um Informationen anzuzeigen und ändere FormMain.vstLog zu deinem ...

%Vor%

...

%Vor%     
Logman 03.01.2011, 20:46
quelle
10

Warum verwenden Sie keine Listenansicht im virtuellen Modus? Das wird richtig aussehen und sich gut anfühlen.

Das Delphistool TListView-Steuerelement ist ein Wrapper um die Windows-Listenansichtskomponente. In der Standardbetriebsart werden Kopien der Listendaten von Ihrer App an die Windows-Steuerung übertragen und dies ist langsam.

Die Alternative dazu ist in der Windows-Terminologie als virtuelle Listenansicht bekannt. Ihre App übergibt die Daten nicht an das Windows-Steuerelement. Wenn das Steuerelement Daten anzeigen muss, fragt es stattdessen Ihre App nur nach den benötigten Daten ab.

Das Delphi TListView-Steuerelement macht virtuelle Listenansichten mithilfe der OwnerData-Eigenschaft verfügbar. Sie müssen Ihren Listenansichtscode etwas umschreiben, aber es ist nicht zu schwer.

Ich biete auch einen Link zu einem anderen Frage hier, die ähnlichen Boden abgedeckt. Seltsamerweise sprach die akzeptierte Antwort für diese Frage über Listenfelder, obwohl die Frage über Listenansichtskontrollen war.

    
David Heffernan 03.01.2011 17:53
quelle
6

mit VirtualStringTree ist es ein bisschen komplexer als die einfache TListView, aber hier ist ein sehr einfaches Tutorial, das ich ein wenig zurück zur Verwendung von VirtualStringTree erstellt habe ComputerSaysNo 03.01.2011 18:34

quelle
4

Verwenden Sie einfach Ihre normale TListView, aber verwenden Sie sie im virtuellen Modus .

Es ist wirklich einfach:

  1. Setzen Sie die Eigenschaft OwnerData auf true
  2. Implementieren Sie den OnData -Ereignishandler.

Beispielimplementierung, die eine einfache Liste von 3 Zeilen zeigt:

%Vor%

Das ist alles!

Einige Dinge zu beachten:

  1. Sie rufen ListView1.Items.Add () nicht mehr auf.
  2. Sie müssen Ihre eigene Liste von Daten irgendwo im Speicher behalten oder die Daten in Echtzeit erstellen, damit Sie keine Daten mehr in der Listenansicht "speichern" können.
  3. Sie müssen die Eigenschaft items.count festlegen, sonst wird nichts angezeigt.
  4. Rufen Sie ListView1.Update () auf, wenn sich etwas ändert.
Wouter van Nifterick 04.01.2011 02:06
quelle
1

Holen Sie sich das Paket VT Contributions und überprüfen Sie einige der Nachkommen der virtuellen Zeichenfolge Baum. Das sind da drin. Ich habe sie nicht in Projekten verwendet, aber sie scheinen Virtual String Tree einfacher zu verwenden.

Hier ist mein Einstieg in die Grundlagen:

Ich habe nach der Verwendung von Virtual String Tree festgestellt, dass die einzige Möglichkeit, das Beste daraus zu machen, darin besteht, die init node / child-Funktionen zu implementieren und die Anzahl der Root-Knoten festzulegen, ähnlich wie bei einer Liste Ansicht mit eigentümerschaft: = wahr.

Es ist ziemlich einfach, mit VirtualStringTree Sachen zu erledigen, Sie müssen nur die Funktion get text und die Knotengröße implementieren (legen Sie sie gleich der Größe des Datensatzes fest, den Sie als Daten hinter Ihrem Baum verwenden möchten)

Ich habe festgestellt, dass es fast immer einfacher ist TVirtualTreeNodeRecordData = record Data : TVirtualTreeNodeData; end

und erstellen Sie das Datenobjekt auf den init-Funktionen. Es erstellt die Zeiger für Sie, aber Sie müssen die Objekte freigeben (verwenden Sie erneut einen Rückruf für den Löschknoten).

    
Peter Turner 03.01.2011 20:51
quelle