delphi 中 ListView 控件的问题..
答案:2 悬赏:40
解决时间 2021-02-08 13:51
- 提问者网友:雨之落き
- 2021-02-07 15:27
delphi 中 ListView 控件的问题..
最佳答案
- 二级知识专家网友:滚出爷的世界
- 2021-02-07 15:33
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.
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.
全部回答
- 1楼网友:高冷不撩人
- 2021-02-07 16:27
if item.subitems.strings[0] = 'bbbbb' then
sender.canvas.brush.color:= clred;
sender.canvas.fillrect(item.displayrect(dricon));
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |