-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtreeview_utils.pas
More file actions
75 lines (53 loc) · 1.62 KB
/
treeview_utils.pas
File metadata and controls
75 lines (53 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
unit Treeview_utils;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ComCtrls;
var
FSearchCounter, FSearchNext : Integer;
SearchResult : array of integer;
function GetNodeByText(ATrv : TTreeView; AValue:String) : Integer;
procedure SearchNextTrv(ATrv : TTreeView);
implementation
function GetNodeByText(ATrv: TTreeView; AValue: String) : Integer;
var
i: Integer;
iItem : String;
begin
FSearchCounter := 0;
ATrv.ClearSelection();
if ATrv.Items.Count = 0 then Exit;
for i := 0 to ATrv.Items.Count - 1 do begin
iItem := ATrv.Items[i].Text;
if pos(AValue, iItem)>=1 then begin //x:=pos(substring,string);
setlength(SearchResult, FSearchCounter+1);
ATrv.Selected := ATrv.Items[i];
ATrv.Items[i].Expanded := true; // expand the found node.
SearchResult[FSearchCounter] := ATrv.Items[i].AbsoluteIndex; // create a list with selected nodes indexes
Inc(FSearchCounter);
end;
end;
FSearchNext := 0; // used for search next
Result := FSearchCounter;
end;
procedure SearchNextTrv(ATrv: TTreeView);
var
i : Integer;
Node : TTreeNode;
begin
if (length(SearchResult) >= 1) and (length(SearchResult) <> FSearchNext) then begin
i := SearchResult[FSearchNext];
end;
for Node in ATrv.Items do begin
if Node.AbsoluteIndex = i then begin
ATrv.ClearSelection();
Node.Selected := True;
Inc(FSearchNext);
if length(SearchResult) = FSearchNext then begin
FSearchNext := 0;
end;
break;
end;
end;
end;
end.