Einzelnen Beitrag anzeigen

madas

Registriert seit: 9. Aug 2007
207 Beiträge
 
#21

AW: Virtualstringtree suchen mit Child-Nodes

  Alt 16. Mär 2016, 08: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 08:59 Uhr)
  Mit Zitat antworten Zitat