Einzelnen Beitrag anzeigen

Benutzerbild von AndreasP
AndreasP

Registriert seit: 14. Aug 2003
Ort: Halle
82 Beiträge
 
Delphi 7 Professional
 

Re: VirtualStringTree und Incremental-Search

  Alt 10. Dez 2005, 22:28
mahlzeit,

da du dieses code-fragment warscheinlich aus einem fremden code hast könnte ich maximal über 'PropertyTexts' und 'ptkText' spekulieren. mit 'Min' ist warscheinlich min(); aus math.pas gemeint (gibt dir den kleinsten wert von 2 variablen wieder). ich vermute mal das du alle deine nodes rekursiv nach einem text (node-text) durchsuchen willst. dafür bietet dir vt die funktion IterateSubtree() (es wird empfohlen diese funktion zum durchsuchen zu verwenden). die verwendung ist eigentlich ganz einfach:
Delphi-Quellcode:
TBaseVirtualTree.IterateSubtree(Node: PVirtualNode; Callback: TVTGetNodeProc; Data: Pointer;
  Filter: TVirtualNodeStates = []; DoInit: Boolean = False; ChildNodesOnly: Boolean = False): PVirtualNode;
Node: Node ab der gesucht werden soll, nil geht glaube ich wenn du alle nodes durchsuchen willst
Callback: ist eine procedure die regelt wie gesucht werden soll
Data: daten nach denen gesucht werden soll
der rest ist für diesen fall uninteresannt, siehe zur not in der beiliegenden hilfedatei nach.

konkretes beispiel (aus meinem aktuellen projekt)
Delphi-Quellcode:
  TMain = class(TTntForm)
  ...
  private
  procedure HideNodes(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
  ...
  end;

procedure TMain.e_filterChange(Sender: TObject);
begin
//e_filter: Editfeld mit dem zu suchenden Text
//v_CatalogRootNode: variable die ich zur besseren verwaltung in meinem projekt verwende
  Main.vst_catalog.BeginUpdate;
  Main.vst_catalog.IterateSubtree(v_CatalogRootNode, HideNodes, Pointer(e_filter.Text), [], true);
  Main.vst_catalog.EndUpdate;
end;


procedure TMain.HideNodes(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var NodeData: TNodeData;
  b: boolean;
  ws: widestring;
...
begin
  b := true;
  ws := WideString(Data);
  NodeData := Sender.GetNodeData(Node);
  begin
  {Auswertung ob "Node" der suchkriterien entspricht und "b" etsprechend setzen}
  end;
 
  //Node Anzeigen oder Verstecken
  Sender.IsVisible[Node] := b;
end;
das ganze ist natürlich leicht aus dem zusammenhang gerissen, aber das grundprinzip sollte deutlich werden. sollte es nicht das sein wonach du gesucht hast, dann sei bitte so nett und ignoriere meine beitrag einfach
Live long and prosper, Andy

Die Diskusion zum AppManager gibt es hier
Immer die aktuelle Version vom AppManger
  Mit Zitat antworten Zitat