Hallo, ich hab ein Formular mit einem TTreeView, ich möchste alle Nodes durchsuchen. Wenn der Node Text und der such text die selben sind soll es geschlöscht werden.
so hab ich es gemacht:
Delphi-Quellcode:
type DelArray = arrey of TTreeNode;
procedure TMainForm.DeleteItems(parent:TTreeNode; var del:TDelArray);
var
node : TTreeNode;
begin
if (CompareText('TABLE_CAD_ZUORD', Uppercase(parent.Text)) = 0) or
(CompareText('PROTOTYP', Uppercase(parent.Text)) = 0) or
(CompareText('NUMBERNODES', Uppercase(parent.Text)) = 0) or
(CompareText('TABLE_NUMBERNODES', Uppercase(parent.Text)) = 0) or
(CompareText('CARINCAD', Uppercase(parent.Text)) = 0) or
(CompareText('1', Uppercase(parent.Text)) = 0) or
(CompareText('TABLE_VARINCAD', Uppercase(parent.Text)) = 0) or
(CompareText('TABLE_DATEIFILTER', Uppercase(parent.Text)) = 0) or
(CompareText('PLANLAUF', Uppercase(parent.Text)) = 0) then
begin
SetLength(del, Length(del) +1);
del[high(del)] := parent;
if (CompareText('TABLE_DATEIFILTER', Uppercase(parent.Text)) = 0) then ShowMessage('Hallo, hmm');
Exit;
end;
if parent.HasChildren then
begin
node := parent.getFirstChild;
while Assigned(Node) do
begin
DeleteItems(node, del);
node := node.getNextSibling;
end;
end;
end;
// Alle Überflüssigen Knoten werden wieder gelöscht.
procedure TMainForm.BlendeAus();
var
anz, i : LongInt;
del : TDelArray;
node : TTreeNode;
begin
SetLength(del, 0);
node := TreeView.Items.GetFirstNode;
while Assigned(Node) do
begin
DeleteItems(node, del);
node := node.getNextSibling;
end;
for I := Low(del) to High(del) do
begin
del[i].DeleteChildren;
del[i].Delete;
end;
SetLength(del, 0);
end;
Das geht auch Teilweise... Bis Node Level 4 geht das, aber bei den anderen Notes geht das nicht mehr. Ich hab schon mal versucht ein String zu suchen der NUR in der 5. Ebene zu finden, aber kein Erflog. Als wenn der nach Level 4 keine lust mehr hätte...
SIeht jemand meinen Fehler? Oder hat jemand ne bessere Idee?
Danke schon mal,
Gruss Thorben