我在窗体的Create事件中建立了树的结点,根结点是设计时指定的.为了让树的TreeNode结点除了显示其相应的标签内容外,我还要求其记录额外的信息,比如人员的编号"rycode",所以我写了一下代吗:
PPersonRec = ^TPersonRec ;
TPersonRec = record
Fis_czy : string;
Fzycode :string;
end;
procedure TfrmUser.FormCreate(Sender: TObject);
var CurNode,TreeNode: TTreeNode;
NoteTitle,ItemCaption:string;
ListItem: TListItem;
ColCount,i,j,m:integer;
RecNum: integer;
PersonRecPtr :PPersonRec;
begin
New(PersonRecPtr); //建立记录类型的对象事例
PersonRecPtr^.Fis_czy:='';
PersonRecPtr^.Fzycode:='' ;
//显示树
TreeNode:=TreeView1.Items.GetFirstNode;
qryZhiy.Close;
qryZhiy.SQL.Clear;
qryZhiy.SQL.Text:='select * from zhiydoc ';
qryZhiy.Open;
while not qryZhiy.Eof do
begin
NoteTitle :=qryZhiy.FieldValues['zyname'];
PersonRecPtr^.Fzycode:=qryZhiy.FieldValues['zycode'];
PersonRecPtr^.Fis_czy:=qryZhiy.FieldValues['is_czy'] ;
// CurNode := TreeView1.Items.AddChild(TreeNode,Trim(NoteTitle));
CurNode :=TreeView1.Items.AddChildObject(TreeNode,Trim(NoteTitle),PersonRecPtr);
CurNode.ImageIndex:=5;
CurNode.SelectedIndex :=5; //选择时显示的图片
qryZhiy.Next;
end;
//显示列表
qryZhiy.Close;
qryZhiy.SQL.Clear;
qryZhiy.SQL.Text:='select * from zhiydoc where beactive='+''''+'是'+'''';
qryZhiy.Open;
if qryZhiy.RecordCount>0 then
begin
while not qryZhiy.Eof do
begin
m:=2;
ListItem :=ListView1.Items.Add;
ListItem.Caption:=qryZhiy.FieldValues['zycode'];
for ColCount:=0 to ListView1.Columns.Count-1 do
begin
ItemCaption:=qryZhiy.Fields.Fields[m].Value;
ListItem.SubItems.Add(ItemCaption);
Inc(m);
end;
qryZhiy.Next;
end;
end;end;我同样还要求当我右键单机某个结点时,读取我建立树时存储的'rycode'等信息,以便按rycode查找人员的所有其他信息显示到一个新的窗口执行修改等操作.针对次我写了一下代码:N3为PopUpMenu的一个子项procedure TfrmUser.N3Click(Sender: TObject);
var
zycode:string;
begin if TreeView1.Selected.IsFirstNode=false then
begin
frmUser.IsDblClick:=true ; //用于控制人员维护界面的按钮状态
zycode:=PPersonRec(TreeView1.Selected.Data)^.Fzycode;
frmUserOper := TfrmUserOper.Create(Self);
frmUserOper.ShowModal;
frmUserOper.Free;
end;end;
问题出现了:无论我右键单机选择那个树的结点,跟踪发现返回的zycode总是一个值,我都快晕了,我是个新手,恳请个位帮忙指点!
PPersonRec = ^TPersonRec ;
TPersonRec = record
Fis_czy : string;
Fzycode :string;
end;
procedure TfrmUser.FormCreate(Sender: TObject);
var CurNode,TreeNode: TTreeNode;
NoteTitle,ItemCaption:string;
ListItem: TListItem;
ColCount,i,j,m:integer;
RecNum: integer;
PersonRecPtr :PPersonRec;
begin
New(PersonRecPtr); //建立记录类型的对象事例
PersonRecPtr^.Fis_czy:='';
PersonRecPtr^.Fzycode:='' ;
//显示树
TreeNode:=TreeView1.Items.GetFirstNode;
qryZhiy.Close;
qryZhiy.SQL.Clear;
qryZhiy.SQL.Text:='select * from zhiydoc ';
qryZhiy.Open;
while not qryZhiy.Eof do
begin
NoteTitle :=qryZhiy.FieldValues['zyname'];
PersonRecPtr^.Fzycode:=qryZhiy.FieldValues['zycode'];
PersonRecPtr^.Fis_czy:=qryZhiy.FieldValues['is_czy'] ;
// CurNode := TreeView1.Items.AddChild(TreeNode,Trim(NoteTitle));
CurNode :=TreeView1.Items.AddChildObject(TreeNode,Trim(NoteTitle),PersonRecPtr);
CurNode.ImageIndex:=5;
CurNode.SelectedIndex :=5; //选择时显示的图片
qryZhiy.Next;
end;
//显示列表
qryZhiy.Close;
qryZhiy.SQL.Clear;
qryZhiy.SQL.Text:='select * from zhiydoc where beactive='+''''+'是'+'''';
qryZhiy.Open;
if qryZhiy.RecordCount>0 then
begin
while not qryZhiy.Eof do
begin
m:=2;
ListItem :=ListView1.Items.Add;
ListItem.Caption:=qryZhiy.FieldValues['zycode'];
for ColCount:=0 to ListView1.Columns.Count-1 do
begin
ItemCaption:=qryZhiy.Fields.Fields[m].Value;
ListItem.SubItems.Add(ItemCaption);
Inc(m);
end;
qryZhiy.Next;
end;
end;end;我同样还要求当我右键单机某个结点时,读取我建立树时存储的'rycode'等信息,以便按rycode查找人员的所有其他信息显示到一个新的窗口执行修改等操作.针对次我写了一下代码:N3为PopUpMenu的一个子项procedure TfrmUser.N3Click(Sender: TObject);
var
zycode:string;
begin if TreeView1.Selected.IsFirstNode=false then
begin
frmUser.IsDblClick:=true ; //用于控制人员维护界面的按钮状态
zycode:=PPersonRec(TreeView1.Selected.Data)^.Fzycode;
frmUserOper := TfrmUserOper.Create(Self);
frmUserOper.ShowModal;
frmUserOper.Free;
end;end;
问题出现了:无论我右键单机选择那个树的结点,跟踪发现返回的zycode总是一个值,我都快晕了,我是个新手,恳请个位帮忙指点!
给你一段代码:
procedure TfrmStockFind.createTree;
var
MyRecPtr: PMyRec;
AQuery:TADOQuery;
begin
tvFind.Items.Clear;
ANode:=tvFind.Items.Add(nil,'查询方案');
ANode.ImageIndex :=0; AQuery:=TADOQuery.Create(nil);
AQuery.Connection :=dmdb.ADOconn;
with AQuery do
begin
Close;
sql.Clear;
sql.Text :='select * from cscxfa where ftype=''1''';
open;
first;
while not eof do
begin
New(MyRecPtr); //申请空间
MyRecPtr^.FID :=fieldbyname('fid').AsString;
MyRecPtr^.FContent :=fieldbyname('fvalue').AsString;
BNode:=tvFind.Items.AddChildObject(ANode,fieldbyname('fname').AsString,MyRecPtr);
BNode.ImageIndex:=1;
BNode.SelectedIndex :=7;
MyRecPtr:=nil; //释放
next;
end;
end;
tvFind.TopItem.Expanded :=true;
end;