Registriert seit: 9. Aug 2007
207 Beiträge
|
AW: Virtualstringtree suchen mit Child-Nodes
16. Mär 2016, 09:46
Delphi-Quellcode:
//EditChange Suche
procedure TfReportClient.edtSearchChange(Sender: TObject);
begin
vstKunden.BeginUpdate;
vstKunden.IterateSubtree(nil, SpeedSearch, Pointer(edtSearch.Text), [], true);
vstKunden.EndUpdate;
end;
Vieleicht fällt ja irgendetwas auf...
Gruß Jens
Also bei uns sieht der OnChange event vom Edit so aus:
Delphi-Quellcode:
procedure TFormTest.EditFilterSearchChange(Sender: TObject);
begin
if (not (tsIterating in vstFilter.TreeStates)) then
vstFilter.IterateSubtree(Node, vstFilterSearchCallback, nil);
end;
Sprich ohne vstFilter.BeginUpdate
und vstFilter.EndUpdate
.
CallBack schaut dann so aus:
Delphi-Quellcode:
procedure TFormTest.vstFilterSearchCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var
nodeData: TFilterCustomItem;
begin
if (Assigned(Node)) then
begin
nodeData := TFilterCustomItem(Sender.GetNodeData(Node)^);
Sender.IsVisible[Node] := True;
if (nodeData is TFilterFieldValue) then
begin
Sender.IsVisible[Node] :=
(EditFilterSearch.Text = EmptyStr) or
(AnsiContainsText(StringReplace(nodeData.CellText, ' ', '', [rfReplaceAll]), StringReplace(EditFilterSearch.Text, ' ', '', [rfReplaceAll])));
if (Assigned(Node.Parent)) then
begin
...
// Parent wird dann hier auf Grund der sichtbaren Anzahl an Childs auch ein- bzw. ausgeblendet
// Und falls vorhanden Parent.Parent auch
...
end;
end;
end;
end;
Grüße madas
Geändert von madas (16. Mär 2016 um 09:59 Uhr)
|
|
Zitat
|