中易网

delphi 中 ListView 控件的问题..

答案:2  悬赏:40  
解决时间 2021-02-08 13:51
delphi 中 ListView 控件的问题..
最佳答案
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, DB, ADODB, Menus;

type
TForm1 = class(TForm)
TreeView1: TTreeView;
du: TButton;
ADOQuery1: TADOQuery;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
change: TButton;
add: TButton;
addchild: TButton;
PopupMenu1: TPopupMenu;
Nadd: TMenuItem;
Naddchild: TMenuItem;
Nchange: TMenuItem;
Ndelete: TMenuItem;
procedure duClick(Sender: TObject);
Function AddNode(TreeView:TTreeView;Node:TTreeNode;ADOQ:TADOQuery):TTreeNode;
Function SearchNode(TreeView:TTreeView;Txts:String):TTreeNode;
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure changeClick(Sender: TObject);
procedure addClick(Sender: TObject);
procedure addchildClick(Sender: TObject);
procedure NaddClick(Sender: TObject);
procedure NaddchildClick(Sender: TObject);
procedure NchangeClick(Sender: TObject);
procedure NdeleteClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

Function TForm1.AddNode(TreeView:TTreeview;Node:TTreeNode;ADOQ:TADOQuery):TTreeNode;
var
Node1:TTreeNode;
s:PString;
begin
Node1:=TreeView.Items.AddChild(Node,ADOQ.FieldByName('text').Text);
New(s);
s^:=ADOQ.FieldByName('id').Text;
Node1.Data:=s;
Result:=Node1;
end;

Function TForm1.SearchNode(TreeView:TTreeView;Txts:String):TTreeNode;
var
i:integer;
s:PString;
begin
Result:=nil;
For i:=0 To TreeView.Items.Count-1 Do
begin
s:=TreeView.Items[i].Data;
If s^=Txts Then
begin
Result:=TreeView.Items[i];
Exit;
end;
end;
end;

procedure TForm1.duClick(Sender: TObject);
var
i,Rec_Num:integer;
Node1,Node2:TTreeNode;
begin
TreeView1.Items.Clear;
TreeView1.Items.BeginUpdate;
Node1:=TreeView1.Items.GetFirstNode;
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from tree order by id');
open;
end;
If ADOquery1.RecordCount>0 Then
Begin
Rec_Num:= ADOQuery1.RecordCount;
For i:=0 To Rec_Num-1 Do
begin
If ADOQuery1.FieldByName('pid').Text='0' Then
Node2:=AddNode(TreeView1,Node1,ADOQuery1)
Else
begin
Node2:=SearchNode(TreeView1,ADOQuery1.FieldByName('pid').Text);
If Node2<>nil Then
AddNode(TreeView1,Node2,ADOQuery1);
end;
ADOQuery1.Next;
end;
End;
TreeView1.Items.EndUpdate;
end;
//以上是从数据库显示一个树
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var
p:pstring;
begin
p:=node.data;
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from tree where id=:a');
parameters.ParamByName('a').Value :=p^;
open;
edit1.text:=fieldbyname('pid').Text;
edit2.Text:=fieldbyname('id').Text;
edit3.Text:=fieldbyname('text').Text;
end;
end;
//以上是显示子目录的ID,父ID,TEXT
procedure TForm1.changeClick(Sender: TObject);
begin
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('update tree set text=:a where id=:b');
parameters.ParamByName('a').Value :=edit3.Text;
parameters.ParamByName('b').Value :=edit2.Text;
execsql;
end;
except
Application.MessageBox('记录修改失败!!!','提示信息',0);
end;
end;
//以上是修改子目录的TEXT
procedure TForm1.addClick(Sender: TObject);
begin
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into tree (pid,text) values (:a,:b)');
parameters.ParamByName('a').Value :=edit1.Text;
parameters.ParamByName('b').Value :='未命名';
execsql;
end;
except
Application.MessageBox('记录添加失败!!!','提示信息',0);
end;
end;
//以上是添加目录
procedure TForm1.addchildClick(Sender: TObject);
begin
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into tree (pid,text) values (:a,:b)');
parameters.ParamByName('a').Value :=edit2.Text;
parameters.ParamByName('b').Value :='未命名';
execsql;
end;
except
Application.MessageBox('记录添加失败!!!','提示信息',0);
end;
end;
//以上是添加子目录

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下是POPUPMENU的代码

procedure TForm1.NaddClick(Sender: TObject);
begin
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into tree (pid,text) values (:a,:b)');
parameters.ParamByName('a').Value :=edit1.Text;
parameters.ParamByName('b').Value :='未命名';
execsql;
end;
except
Application.MessageBox('记录添加失败!!!','提示信息',0);
end;
end;
//以上是添加目录

procedure TForm1.NaddchildClick(Sender: TObject);
begin
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into tree (pid,text) values (:a,:b)');
parameters.ParamByName('a').Value :=edit2.Text;
parameters.ParamByName('b').Value :='未命名';
execsql;
end;
except
Application.MessageBox('记录添加失败!!!','提示信息',0);
end;
end;
//以上是添加子目录

procedure TForm1.NchangeClick(Sender: TObject);
begin
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('update tree set text=:a where id=:b');
parameters.ParamByName('a').Value :=edit3.Text;
parameters.ParamByName('b').Value :=edit2.Text;
execsql;
end;
except
Application.MessageBox('记录修改失败!!!','提示信息',0);
end;
end;
//以上是修改子目录的TEXT

procedure TForm1.NdeleteClick(Sender: TObject);
begin
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('delete from tree where id=:a');
parameters.ParamByName('a').Value :=edit2.Text;
execsql;
end;
except
Application.MessageBox('记录删除失败!!!','提示信息',0);
end;
end;
//以上是删除目录
end.
全部回答
if item.subitems.strings[0] = 'bbbbb' then sender.canvas.brush.color:= clred; sender.canvas.fillrect(item.displayrect(dricon));
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
湖滨区三门峡中国人寿保险股份有限公司(交口
给郦道元的一封信
用excel怎么算坐标?
我是一个新手,请问建筑劳务公司主要涉及哪些
济南市第二人民医院-医学影像科在什么地方啊
优理氏密集焕白套盒真假
晶密牌晶采指纹考勤机怎么录入新的指纹呢,说
海燕放心肉铺地址在哪,我要去那里办事
联想电脑海门市货隆镇专卖店在哪里啊,我有事
我是15年考税务专硕的~~~
音频文件检查损坏
商务酒店客房服务员和大型饭店服务员那个比较
工程类高工,上海社保已交6年,如何申请上海
狗狗为什么见到人跺脚,会掉头走(或者停止前进
自由路10号街坊地址在哪,我要去那里办事
推荐资讯
用路由器经常上不去网怎么办?
空调除湿怎么冒白烟出来 室外20度 我空调开18
山西省心血管病医院-医技楼地址在哪,我要去
女孩说和妈一起包饺子,下面该如何答
为什么流行音乐过时的快 什么样的音乐不会过
中国移动阿斌通讯地址在什么地方,想过去办事
关于飞利浦咖啡机
格兰英郡西门地址在哪,我要去那里办事
世界500强公司前台文员的工作同意我去上班,
深圳日化连锁(河源店)在哪里啊,我有事要去这
我是准备在房山工作的年轻高中教师,贪心的问
08年10月16日(农历九月十八)早上九点二十出
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?