这样问可以吗??

cxj21 2003-07-11 08:12:25
我想在目录树中实现这样的功能!点目录树的某个接点,我想把他下面的子接点查找出来!怎么实现!给点代码!谢谢
...全文
16 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dickeybird888 2003-07-11
  • 打赏
  • 举报
回复
我猜你可能是要,子节点动态生成的例子把,我有一个,你可以参考一下

unit IMSBMZJJG;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
G_FormBillBase, Wwintl, StdCtrls, TrMemo, CloseBit, ExtCtrls, TrPanel,
TeeProcs, TeeDraw3D, ComCtrls, Db, DBTables;

type
TFrmBMZJJG = class(TfrmBillBase)
TreeView1: TTreeView;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
{ Public declarations }
dwmc:string;
dwdm:string;
end;

var
FrmBMZJJG: TFrmBMZJJG;

implementation

{$R *.DFM}

procedure TFrmBMZJJG.FormShow(Sender: TObject);
var
MyTreeNode1:TTreeNode;
MyTreeNode2:TTreeNode;
MyTreeNode3:TTreeNode;
begin
//生成第一级目录
TreeView1.Items.Clear;
MyTreeNode1:=TreeView1.Items.AddChild(nil,'有限公司-X0000000');
MyTreeNode2:=TreeView1.Items.AddChild(MyTreeNode1,'主体单位-Z0000010');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'公司机关-Z0000011');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'生产单位-Z0000012');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'辅助单位-Z0000013');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'营销单位-Z0000014');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'后勤单位-Z0000015');
MyTreeNode2.Expanded:=True;
MyTreeNode2:=TreeView1.Items.AddChild(MyTreeNode1,'分离单位-F0000010');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'龙华公司-XLH00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'兴达公司-XXD00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'工程公司-XGC00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'经贸公司-XJM00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'汽运公司-XQY00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'林铁矿-XK100000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'星矿-XK200000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'职工医院-XYY00000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'工学院-XX100000');
MyTreeNode3:=TreeView1.Items.AddChild(MyTreeNode2,'协调办-XXT00000');
MyTreeNode1.Expanded:=True;
MyTreeNode2.Expanded:=True;
end;

procedure TFrmBMZJJG.FormClose(Sender: TObject; var Action: TCloseAction);
var node:TTreenode;
begin
inherited;
node:=treeview1.selected;
dwdm:=Trim(copy(Node.Text,Pos('-',Node.Text)+1,Length(Node.Text)));//取得部门编码
dwmc:=Trim(copy(trim(node.Text),1,Pos('-',Node.Text)-1));//取得部门编码
action:=cafree;
end;

procedure TFrmBMZJJG.TreeView1Change(Sender: TObject; Node: TTreeNode);
var Query3:TQuery;
begin
inherited;
if ((Node.Level>1) and (Node.HasChildren=False) and (Node.Level<4)) then
begin
//生成下一级目录
Query3:=TQuery.Create(Application);
Query3.DatabaseName:='IMS_DATA';
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('SELECT * FROM BISFCDEPA ');
Query3.SQL.Add('WHERE UP_DEPARTMENT_CODE=:Aup_Department_Code AND DELETE_SIGN=''N'' ');
Query3.SQL.Add('AND DEPARTMENT_GRADE<>''6'' AND DEPARTMENT_GRADE<>''7''');
Query3.ParamByName('Aup_Department_Code').AsString:=copy(Node.Text,Pos('-',Node.Text)+1,Length(Node.Text));
Query3.Open;
Query3.First;
if Query3.RecordCount<>0 then
begin
while not Query3.Eof do
begin
TreeView1.Items.AddChild(Node,Query3.FieldByName('DEPARTMENT_NAME').AsString+'-'+Query3.FieldByName('DEPARTMENT_CODE').AsString);
Query3.Next;
end;
end;
Query3.Free;
Node.Expanded:=True;
end;
end;

end.
nielijun 2003-07-11
  • 打赏
  • 举报
回复
procedure TJG_CustomerPriceF.NodeSelect(Node: TTreeNode);
var
Node0,Node1,Node2,Node3,Node4: TTreeNode;
begin
if Node=nil then exit;
Node0 := Node;
case Node0.StateIndex of
1: //之前为全选状态,通过此过程将其和其所有孩子节点的选择状态全取消,置为2
begin
TreeCust.Selected := Node0;
TreeCust.Selected.StateIndex := 2;
Node1 := Node0.getFirstChild;
while Node1<>nil do
begin
TreeCust.Selected := Node1;
TreeCust.Selected.StateIndex := 2;
Node2 := Node1.getFirstChild;
while Node2<>nil do
begin
TreeCust.Selected := Node2;
TreeCust.Selected.StateIndex := 2;
Node3 := Node2.getFirstChild;
while Node3<>nil do
begin
TreeCust.Selected := Node3;
TreeCust.Selected.StateIndex := 2;
Node4 := Node3.getFirstChild;
while Node4<>nil do
begin
TreeCust.Selected := Node4;
TreeCust.Selected.StateIndex := 2;
Node4 := Node3.GetNextChild(Node4);
end;
Node3:=Node2.GetNextChild(Node3);
end;
Node2:=Node1.GetNextChild(Node2);
end;
Node1 := Node0.GetNextChild(Node1);

end;
end;
2: //之前为全取消状态,通过此过程将其和其所有孩子节点的选择状态全选择,置为0
begin
TreeCust.Selected := Node0;
TreeCust.Selected.StateIndex := 1;
Node1 := Node0.getFirstChild;
while Node1<>nil do
begin
TreeCust.Selected := Node1;
TreeCust.Selected.StateIndex := 1;
Node2 := Node1.getFirstChild;
while Node2<>nil do
begin
TreeCust.Selected := Node2;
TreeCust.Selected.StateIndex := 1;
Node3 := Node2.getFirstChild;
while Node3<>nil do
begin
TreeCust.Selected := Node3;
TreeCust.Selected.StateIndex := 1;
Node4 := Node3.getFirstChild;
while Node4<>nil do
begin
TreeCust.Selected := Node4;
TreeCust.Selected.StateIndex :=1;
Node4 := Node3.GetNextChild(Node4);
end;
Node3:=Node2.GetNextChild(Node3);
end;
Node2:=Node1.GetNextChild(Node2);
end;
Node1 := Node0.GetNextChild(Node1);

end;
end;
3: //之前为部分选择状态,通过此过程将其和其所有孩子节点的选择状态全选择,置为0
begin
TreeCust.Selected := Node0;
TreeCust.Selected.StateIndex := 1;
Node1 := Node0.getFirstChild;
while Node1<>nil do
begin
TreeCust.Selected := Node1;
TreeCust.Selected.StateIndex := 1;
Node2 := Node1.getFirstChild;
while Node2<>nil do
begin
TreeCust.Selected := Node2;
TreeCust.Selected.StateIndex := 1;
Node3 := Node2.getFirstChild;
while Node3<>nil do
begin
TreeCust.Selected := Node3;
TreeCust.Selected.StateIndex := 1;
Node4 := Node3.getFirstChild;
while Node4<>nil do
begin
TreeCust.Selected := Node4;
TreeCust.Selected.StateIndex := 1;
Node4 := Node3.GetNextChild(Node4);
end;
Node3:=Node2.GetNextChild(Node3);
end;
Node2:=Node1.GetNextChild(Node2);
end;
Node1 := Node0.GetNextChild(Node1);

end;
end;
end;
TreeCust.Selected := Node;
end;
DWGZ 2003-07-11
  • 打赏
  • 举报
回复
1.展开
procedure TForm1.Button1Click(Sender: TObject);
begin
TreeView1.Selected.Expand(True);
end;
2。取子结点下面只取下一层的如果要全部取得要用递归
procedure TForm1.Button2Click(Sender: TObject);
var
SelectedNode, ChildNode: TTreeNode;
I: Integer;
begin
SelectedNode := TreeView1.Selected;
if SelectedNode <> nil then
begin
for I := 0 to SelectedNode.Count - 1 do
begin
ShowMessage(SelectedNode.Item[I].Text);
end;
end;
end;
jbzj 2003-07-11
  • 打赏
  • 举报
回复
查找出来是什么意思?是显示出来?

5,402

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧