十万火急,急急急,求助于指针的使用 ( 积分: 15 )

  • 主题发起人 主题发起人 zpselect
  • 开始时间 开始时间
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
表BM 有两个字段
BM_DM(部门代码) BM_MC(部门名称)
01 人力资源部
02 总务部
03 业务部
... ....
现在我将BM_MC(部门名称)这个字段数据显示在TreeView中,
procedure TForm1.FormActivate(Sender: TObject);
var
mainnode: TTreeNode;
p:^string;
begin
query.Open;
tv.Items.Clear;
new(p);
mainnode := TV.Items.Add(nil, '部门名称');
query.First;
while not query.Eof do
begin
p^ := Query.Fieldbyname('BM_DM').AsString;
TV.Items.AddchildObject(mainnode, query.Fields[1].text, P);
query.Next;
end;
tv.FullExpand;
end;
要求如下:
当点击TreeView中某个Node时,将其对应的BM_DM显示在Edit1中
如:当点击:'人力资源部'时将其对应的BM_DM(部门代码)显示在Edit1中
 
这样,你创建Node时
procedure TForm1.FormActivate(Sender: TObject);
var
mainnode: TTreeNode;
p:pchar;
str:string;
begin
query.Open;
tv.Items.Clear;
mainnode := TV.Items.Add(nil, '部门名称');
query.First;
while not query.Eof do
begin
str:=Query.Fieldbyname('BM_DM').AsString;
getmem(p,length(str));
strpcopy(p,str);
TV.Items.AddchildObject(mainnode, query.Fields[1].text, P);
query.Next;
end;
tv.FullExpand;
end;

然后在treeview的change事件里写:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
if assigned(node) and assigned(node.Data) then
edit1.Text:=string(pchar(node.Data));
end;
 
谢谢,可以了!散分。。。
 
一般的作法,都是利用节点的附加指针来完成其他的操作。这个附加指针功能扩展是极其强大的。呵!~——~,通常都是定义一个记录体来完成。
Type
PNodeData=^TNodeData;
TNodeData=record
name:stirng;
id:integer;
....
//在这里,你可以扩展你想要的内容
end;
 
多人接受答案了。
 
后退
顶部