TreeView 在任意节点添加节点? 怎么在随便哪个节点下面添加呢 或者说资源管理器的那个节点是怎么做的啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哦 还有 treeview中的Indexof怎么用阿 . 先Add,然后MoveToIndexOf是返回子节点的索引。NodeA->IndexOf(NodeB); //返回NodeA子节点NodeB的索引,如果没有则返回-1 怎么知道Selected.Text的Item[?]值 Selected.Text何来Item?Selected.Index便是当前选中节点的索引。 procedure TForm1.Button1Click(Sender: TObject);var tnSel: TTreeNode ; tn: TTreeNode ; i : Integer ;begin tnSel := tv1.Selected ;//你要在那个节点加子节点就赋值给他 i := tv1.Selected.Index ; //选中的Index tn := tv1.Items.Add(tnSel,'11111') ; //同级节点 tn := tv1.Items.AddChild(tnsel,'1122222');//子节点end; 怎么得到上一节点的TXT阿 .. type PTreeNode=^TreeNode; TreeNode=record ID:integer; Name:string; SqlText:string; ParentID:integer; end;//var// SelectedNode:TTreeNode;procedure TFrame_DayreportTree.FillTree;var nData:PTreeNode; ss:TStringList; aNode,bNode,pNode:TTreeNode; i,idx:integer; strSQL:string;begin strSQL:='select * from sqltext'; DestroyTree(self); ADOQuery_Tree.close; ADOQuery_Tree.sql.Clear; ADOQuery_Tree.sql.Add(strSQL); ADOQuery_Tree.open; ADOQuery_Tree.first; ss:=TStringList.Create; for i:=0 to ADOQuery_Tree.recordcount-1 do begin //首先把数据库中的数据取出来构建一个一个数据结构 new(nData); nData^.id:=ADOQuery_Tree.FieldByName('sid').AsInteger; nData^.ParentID:=ADOQuery_Tree.FieldByName('sparentid').AsInteger; nData^.name:=ADOQuery_Tree.FieldByName('sname').AsString; nData^.SqlText:=ADOQuery_Tree.FieldByName('stext').AsString; aNode:=TreeView_DayReportTree.Items.AddObject(nil,'('+intToStr(nData.id)+')'+nData.name,nData); ss.AddObject(inttostr(nData.id),aNode); ADOQuery_Tree.Next; end; nData:=nil; //下面的代码的作用是重新排列树结构,使父节点和子节点联系起来 TreeView_DayReportTree.Items.BeginUpdate; aNode:=TreeView_DayReportTree.Items.GetFirstNode; while(not(aNode= nil)) do begin //ShowMessage(PtreeNode(aNode.Data)^.Name); idx:=PtreeNode(aNode.Data)^.ParentID; i:=ss.IndexOf(inttostr(idx)); //ShowMessage(inttostr(i)); if i=-1 then begin aNode.ImageIndex:=1; aNode.SelectedIndex :=2; aNode:=aNode.getNextSibling; continue; end else begin //改变相应的图标 pNode:=TTreeNode(ss.Objects[i]); pNode.ImageIndex:=1; pNode.SelectedIndex :=2; bNode:=aNode; bNode.SelectedIndex:=6; bNode.ImageIndex:=5; aNode:=aNode.getNextSibling; bNode.MoveTo(pNode,naAddChild); end; end; TreeView_DayReportTree.Items.EndUpdate; ss.Destroy; ss:=nil;// TreeView_DayReportTree.SetFocus;// if SelectedNode<>nil then// TreeView_DayReportTree.Selected:=SelectedNode;end;//销毁树,主要是销毁自己创建的树节点中的数据结构 procedure TFrame_DayreportTree.DestroyTree(Sender:TObject);var aNode:TTreeNode; pNode:PTreeNode;begin //释放掉所有的DATA aNode:=TreeView_DayReportTree.Items.GetFirstNode; while(aNode <> nil) do begin new(PNode); pNode:=PTreenode(aNode.Data); dispose(pNode); pNode:=nil; aNode:=aNode.GetNext; end; aNode:=nil; TreeView_DayReportTree.Items.Clear;end;参考一下吧,这是我程序里用的,其实也是从别的地方找来的。自己再加工一下。呵呵。 Delphi版本的淘宝接口(TopAPI)开发 ACCESS数据库有没有导入数据的功能啊,(我1000条数据不知道这么存进去!) ListView中的item无法选中,寻找解决方法 DBGrid如何实现如下图的样式? 如何读写USB? 请问如何完全清除BackDoor.RBot病毒? 如何在treeview中在selected前加节点? delphi5的ado的bug 如何让打印机只打印当前页? midas问题,初次上路,请高手指点。急!!! FastReport 4的安装问题,在线等! ICS不能触发数据接受了 。。
procedure TForm1.Button1Click(Sender: TObject);
var
tnSel: TTreeNode ;
tn: TTreeNode ;
i : Integer ;
begin
tnSel := tv1.Selected ;//你要在那个节点加子节点就赋值给他
i := tv1.Selected.Index ; //选中的Index tn := tv1.Items.Add(tnSel,'11111') ; //同级节点
tn := tv1.Items.AddChild(tnsel,'1122222');//子节点
end;
PTreeNode=^TreeNode;
TreeNode=record
ID:integer;
Name:string;
SqlText:string;
ParentID:integer;
end;//var
// SelectedNode:TTreeNode;procedure TFrame_DayreportTree.FillTree;
var
nData:PTreeNode;
ss:TStringList;
aNode,bNode,pNode:TTreeNode;
i,idx:integer;
strSQL:string;
begin
strSQL:='select * from sqltext';
DestroyTree(self);
ADOQuery_Tree.close;
ADOQuery_Tree.sql.Clear;
ADOQuery_Tree.sql.Add(strSQL);
ADOQuery_Tree.open;
ADOQuery_Tree.first;
ss:=TStringList.Create;
for i:=0 to ADOQuery_Tree.recordcount-1 do
begin
//首先把数据库中的数据取出来构建一个一个数据结构
new(nData);
nData^.id:=ADOQuery_Tree.FieldByName('sid').AsInteger;
nData^.ParentID:=ADOQuery_Tree.FieldByName('sparentid').AsInteger;
nData^.name:=ADOQuery_Tree.FieldByName('sname').AsString;
nData^.SqlText:=ADOQuery_Tree.FieldByName('stext').AsString;
aNode:=TreeView_DayReportTree.Items.AddObject(nil,'('+intToStr(nData.id)+')'+nData.name,nData);
ss.AddObject(inttostr(nData.id),aNode);
ADOQuery_Tree.Next;
end;
nData:=nil;
//下面的代码的作用是重新排列树结构,使父节点和子节点联系起来
TreeView_DayReportTree.Items.BeginUpdate;
aNode:=TreeView_DayReportTree.Items.GetFirstNode;
while(not(aNode= nil)) do
begin
//ShowMessage(PtreeNode(aNode.Data)^.Name);
idx:=PtreeNode(aNode.Data)^.ParentID;
i:=ss.IndexOf(inttostr(idx));
//ShowMessage(inttostr(i));
if i=-1 then
begin
aNode.ImageIndex:=1;
aNode.SelectedIndex :=2;
aNode:=aNode.getNextSibling;
continue;
end
else
begin
//改变相应的图标
pNode:=TTreeNode(ss.Objects[i]);
pNode.ImageIndex:=1;
pNode.SelectedIndex :=2;
bNode:=aNode;
bNode.SelectedIndex:=6;
bNode.ImageIndex:=5;
aNode:=aNode.getNextSibling;
bNode.MoveTo(pNode,naAddChild);
end;
end;
TreeView_DayReportTree.Items.EndUpdate;
ss.Destroy;
ss:=nil;
// TreeView_DayReportTree.SetFocus;
// if SelectedNode<>nil then
// TreeView_DayReportTree.Selected:=SelectedNode;
end;//销毁树,主要是销毁自己创建的树节点中的数据结构 procedure TFrame_DayreportTree.DestroyTree(Sender:TObject);
var
aNode:TTreeNode;
pNode:PTreeNode;
begin
//释放掉所有的DATA
aNode:=TreeView_DayReportTree.Items.GetFirstNode;
while(aNode <> nil) do
begin
new(PNode);
pNode:=PTreenode(aNode.Data);
dispose(pNode);
pNode:=nil;
aNode:=aNode.GetNext;
end;
aNode:=nil;
TreeView_DayReportTree.Items.Clear;
end;参考一下吧,这是我程序里用的,其实也是从别的地方找来的。自己再加工一下。呵呵。