一个treeview和imagelist关联,treeview的节点层次不定,ImageList有3个图片,0是节点未选中的效果,1是节点和其所有子节点被选中的效果,2是节点的子节点有的未被选中的效果。(瑞星和金山毒霸设置杀毒路径的效果类似),以上功能都已实现。我想遍历所有节点,如果选中则找和它同一个父节点的所有同级节点,如果所有同级节点被选中,则它的父节点就是要找的。现在如何快速找到所有这样的父节点?
for i:=0 to TreeView1.Items.Count-1 do
begin
if TreeView1.Items[i].ImageIndex =1 then
begin
我只会找到这样的节点,然后的代码就不会了
end;
end;
for i:=0 to TreeView1.Items.Count-1 do
begin
if TreeView1.Items[i].ImageIndex =1 then
begin
我只会找到这样的节点,然后的代码就不会了
end;
end;
解决方案 »
- 高分求教,只求一问!关于Delphi 的三层问题
- 用Tmemorystream写入任意10进制的十六进制问题。
- 在delphi7中怎么连接Access数据库???
- 能在delphi里创建sql server里面的dts数据包对象吗?
- 自定义文件格式(record)读写的问题
- 三键鼠标中键的问题
- 简单问题:怎样得到DirectoryListBox1中选择的路径,马上给分!
- xmldocument可以非严格使用标签么?
- 国庆节出去旅游心情特好~!散分~~~~~~~~~!斑竹手下留情
- 请问那里有关于DXDBGRID的使用说明下载?
- 用PB开发接口的人脑子基本上都进水了。。。。。。。。。。
- 根据字符串(控件类型名)动态创建窗体上的控件
TreeNode:TTreeNode;
begin
TreeNode:=TreeView.Selected; //获得被选中的节点
if not (TreeNode=nil) then begin
//TreeNode.Parent //获得父节点
end;
end;
Shift: TShiftState; X, Y: Integer);
procedure pSelect(mTreeNode: TTreeNode; mChecked: Boolean);
var
I: Integer;
begin
mTreeNode.ImageIndex := Ord(mChecked);
mTreeNode.SelectedIndex := Ord(mChecked);
for I := 0 to mTreeNode.Count - 1 do pSelect(mTreeNode[I], mChecked);
end;
procedure pUpdate(mTreeNode: TTreeNode);
var
I: Integer;
S: set of Byte;
begin
while Assigned(mTreeNode.Parent) do
begin
S := [];
for I := 0 to mTreeNode.Parent.Count - 1 do
Include(S, mTreeNode.Parent[I].ImageIndex);
if S = [0] then
begin
mTreeNode.Parent.ImageIndex := 0;
mTreeNode.Parent.SelectedIndex := 0;
end else
if S = [1] then
begin
mTreeNode.Parent.ImageIndex := 1;
mTreeNode.Parent.SelectedIndex := 1;
end else
begin
mTreeNode.Parent.ImageIndex := 2;
mTreeNode.Parent.SelectedIndex := 2;
end;
mTreeNode := mTreeNode.Parent;
end;
end;
var
vTreeNode: TTreeNode;
begin
if not (htOnIcon in TTreeView(Sender).GetHitTestInfoAt(X, Y)) then Exit;
vTreeNode := TTreeView(Sender).GetNodeAt(X, Y);
TTreeView(Sender).Items.BeginUpdate;
try
pSelect(vTreeNode, vTreeNode.ImageIndex = 0);
pUpdate(vTreeNode);
finally
TTreeView(Sender).Items.EndUpdate;
end;
end;
我改写了DELPHI的代码,做了一个这个东西.最好是把它的底层代码也改进一下,就不要你用
图片的编号了标志该节点是否被checked.