Tv_Tree.Items.AddChildObject(NodeP, '用户:', PStr);
想在增加树结点"用户:"在此结点下的指针指向一个记录型的数据
记录型的结构如下:
USER: RECORD
USENAME:STRING;
USEID:STRING;
USEAGE:STRING;
USESEX:STRING;
END;userinf: user
想在增加树结点"用户:"在此结点下的指针指向一个记录型的数据
记录型的结构如下:
USER: RECORD
USENAME:STRING;
USEID:STRING;
USEAGE:STRING;
USESEX:STRING;
END;userinf: user
type
Psid = ^TNodeData;
TNodeData = record
ID: integer;
sNo, sEn: string;
end;
...
procedure TfrmStainfo.DrawTree;
var
aqM01, aqM02: TADOQuery;
i, j: integer;
Nodeo, Nodep: TTreeNode;
sid: Psid;
begin
tvPer.Items.Clear;
aqM01 := TADOQuery.Create(nil);
with aqM01 do
begin
Connection := dmper.acPer;
Sql.Clear;
SQL.Text := 'select dep from dept order by ornum';
Open;
end;
aqM02 := TADOQuery.Create(nil);
aqM02.Connection := dmper.acper;
if not aqM01.Eof then
begin
tvPer.AutoExpand := true;
tvPer.ReadOnly := true;
Nodeo := tvPer.Items.AddFirst(nil, '公司机构');
for i := 0 to aqM01.RecordCount - 1 do
begin
Nodep := tvPer.Items.AddChild(Nodeo, aqM01.FieldByName('dep').Asstring);
with aqM02 do
begin
Close;
SQL.Clear;
SQL.Text := 'select id, stano, name, ename from stainfo where dep =' + QuotedStr(aqM01.FieldByName('dep').AsString) + ' order by name';
Open;
end;
if not aqM02.Eof then
for j := 0 to aqM02.RecordCount - 1 do
begin
New(sid);
sid^.ID := StrToInt(aqM02.FieldByName('id').AsString);
sid^.sNo := aqM02.FieldByName('stano').AsString;
sid^.sEn := aqM02.FieldByName('ename').AsString;
tvPer.Items.AddChildObject(Nodep, aqM02.FieldByName('name').AsString, sid);
aqM02.Next;
end;
aqM01.Next;
end;
end
else
begin
tvPer.Items.AddFirst(nil, '请先添加部门!');
SetBtnState(false);
end;
aqM02.Close;
FreeAndNil(aqM02);
aqM01.Close;
FreeAndNil(aqM01);
if tvPer.Enabled then
tvPer.SetFocus; for i := 0 to tvPer.Items.Count - 1 do
if tvPer.Items[i].Data <> nil then
begin
tvPer.Selected := tvPer.Items[i];
Break;
end;
end;
...
procedure FindTree(aNo: string);
var
i: Integer;
begin
for i := 0 to tvPer.Items.Count - 1 do
if tvPer.Items[i].Data <> nil then
if Psid(tvPer.Items[i].Data)^.sNo = aNo then
begin
tvPer.Items[i].Selected := true;
tvPer.Setfocus;
Break;
end;
end;
...
程序:http://www.xmflyfish.com/awind/apermis.exe
源码:http://www.xmflyfish.com/awind/permis.rar
PMyRecord = ^MyRecord;
MyRecord = record
ID : integer;
name:string;
ParentID : integer;
end;//end of recordvar
p : PMyRecord;
begin
...
new(p);
p.ID := ADOQuery1.FieldByName('ID').AsInteger;
p.name := ADOQuery1.FieldByName('部门名称').AsString;
p.ParentID := ADOQuery1.FieldByName('上级部门ID').AsInteger;
TreeView1.Items.AddChildObject(Node,p.name,p);
//dispose(p);//一定要去掉这条语句,不然的话,Treeview中的Data也被dispose掉了。
...
end;//use PMyRecord(Treeview1.Selected.Data).name