![]() |
VirtualStringTreee auf Eintrag prüfen.
Hi Delphianer
Gibt es eine Möglichkeit in einer VirtualStringTree zu prüfen ob ein eintrag schon vorhanden ist? Mit der ListView habe ich das so gelöst.
Delphi-Quellcode:
Aber wie mach ich so was mit der VirtualStringTree dort gibt es kein FindCaption.
procedure TForm1.BitBtn1Click(Sender: TObject);
var Li: TListItem; begin Li := Listview1.FindCaption(0,Split(Strings.Strings[i], '|', 1),False,True,False); if Li = nil then begin // mach was wenn Eintrag nicht vorhanden ist end; end; |
AW: VirtualStringTreee auf Eintrag prüfen.
Wie speicherst du deine Daten?
Eine virtuelle Liste lebt davon, dass die Daten getrennt von der Komponente in einer eigenen Datenstruktur gespeichert werden. Wenn du das erledigt hast, kannst du die Struktur/Liste durchgehen und ganz einfach prüfen was vorhanden ist und was nicht. |
AW: VirtualStringTreee auf Eintrag prüfen.
Delphi-Quellcode:
So habe ich es jetzt gemacht weiss aber nicht ob es der richtige Weg ist jedenfals funktioniert es.
type
PTreeData = ^TTreeData; TTreeData = record Column0: String; Column1: String; Column2: String; Column3: String; Column4: String; Column5: String; end; // Neuer Wert wird geschrieben fals nicht vorhanden procedure WriteNode(NeuerWert: String); var NodeData: PTreeData; XNode: PVirtualNode; begin XNode := WindowManager.VST.AddChild(nil); NodeData := WindowManager.VST.GetNodeData(Xnode); NodeData^.Column0 := 'Eintrag Column1'; end; // Wert wird überprüfft function CheckNode(FindString: String): Boolean; var XNode: PVirtualNode; NodeData: PTreeData; begin XNode := WindowManager.VST.GetFirst; while XNode <> nil do begin NodeData := WindowManager.VST.GetNodeData(XNode); if NodeData^.Column0 = FindString then begin Result := True; break; end else XNode := WindowManager.VST.GetNextSibling(XNode); Result := false; end; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin for i := 0 to Strings.Count -1 do begin if Checknode(Strings.Strings[i]) = false then WriteNode(Strings.Strings[i]); end; end; |
AW: VirtualStringTreee auf Eintrag prüfen.
Richtig oder falsch gibt es nicht. Aber AddChild ist definitiv nicht schön.
Für alles Weitere wird sich, so hoffe ich, Aviator, VST-Profi, melden. |
AW: VirtualStringTreee auf Eintrag prüfen.
Dieso ist AddChild nicht schön?
|
AW: VirtualStringTreee auf Eintrag prüfen.
Zitat:
Delphi-Quellcode:
und den Events
RootNodeCount
Delphi-Quellcode:
und
OnInitNode
Delphi-Quellcode:
. Bei
OnInitChildren
Delphi-Quellcode:
werden die Nodes immer direkt beim Aufruf der Methode validiert was dazu führt, dass die unterschiedlichsten Events aufgerufen werden und dadurch der gesamte Tree die Nodes nicht mehr virtuell vorhält sondern direkt mit den echten Nutzdaten befüllt.
AddChild
Wenn du
Delphi-Quellcode:
nutzt, dann werden virtuell nur die übergebene Anzahl Nodes erzeugt. Zudem wird das Event
RootNodeCount
Delphi-Quellcode:
für jede Node ausgeführt um schon einmal die Daten daran zu binden. Auch ein gewisser initialer Status (mit dem Referenz Parameter
OnInitNode
Delphi-Quellcode:
) kann der Node bei dem Event mitgegeben werden (z.B. ob diese Children hat oder nicht). Wirklich initialisiert werden die Nodes aber erst, wenn sie entweder in den sichtbaren Bereich gelangen oder du per Code eine Funktion ausführst die diese Node betrifft.
InitialStates
Hier mal ein Auszug aus dem VST SourceCode zur Procedure AddChild()
Delphi-Quellcode:
// Adds a new node to the given parent node. This is simply done by increasing the child count of the
// parent node. If Parent is nil then the new node is added as (last) top level node. // UserData can be used to set the first SizeOf(Pointer) bytes of the user data area to an initial value which can be used // in OnInitNode and will also cause to trigger the OnFreeNode event (if <> nil) even if the node is not yet // "officially" initialized. // AddChild is a compatibility method and will implicitly validate the parent node. This is however // against the virtual paradigm and hence I dissuade from its usage. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz