📄 main.pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, ToolWin, OleCtnrs, ImgList, StdCtrls,
Buttons, Menus, DB, ADODB,Filectrl;
type
TWdForm = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Splitter1: TSplitter;
Panel3: TPanel;
TreeView1: TTreeView;
ToolBar1: TToolBar;
ImageList1: TImageList;
ToolButton1: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
Panel4: TPanel;
Edit1: TEdit;
BitBtn1: TBitBtn;
OpenDialog1: TOpenDialog;
Panel5: TPanel;
OleContainer1: TOleContainer;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
MainMenu1: TMainMenu;
aaaa1: TMenuItem;
S1: TMenuItem;
X1: TMenuItem;
N5: TMenuItem;
A1: TMenuItem;
N6: TMenuItem;
D1: TMenuItem;
N7: TMenuItem;
M1: TMenuItem;
U1: TMenuItem;
D2: TMenuItem;
I2: TMenuItem;
O2: TMenuItem;
H1: TMenuItem;
N12: TMenuItem;
N4: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
StatusBar1: TStatusBar;
N11: TMenuItem;
N13: TMenuItem;
ToolButton2: TToolButton;
F1: TMenuItem;
N14: TMenuItem;
ToolButton5: TToolButton;
procedure ToolButton1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
Procedure GetNode;
procedure N3Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N1Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure U1Click(Sender: TObject);
procedure D2Click(Sender: TObject);
procedure I2Click(Sender: TObject);
procedure O2Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure TreeView1Edited(Sender: TObject; Node: TTreeNode;
var S: String);
procedure TreeView1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
private
{ Private declarations }
TmpNode,rootNode,Nodel:TTreeNode;
nodename:string;
idh:integer;
yn:boolean;
public
{ Public declarations }
end;
var
WdForm: TWdForm;
implementation
uses about,dict,pass;
{$R *.dfm}
type
PMyData=^TMyData;
TMyData=Record
nIndex:integer;
end;
procedure TWdForm.ToolButton1Click(Sender: TObject);
begin
application.Terminate;
end;
function getbh(s:string): string;
var
i,j:integer;
begin
i:=StrToint(s);
i:=i+1;
j:=length(s);
Result:=stringofchar('0',j-length(IntToStr(i)))+IntToStr(i);
end;
procedure TWdForm.BitBtn1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
edit1.Text:=OpenDialog1.FileName;
yn:=false;
nodeName:=ExtractFileName(OpenDialog1.FileName);
TreeView1.Selected.Text:=nodeName;
yn:=true;
end;
end;
procedure TWdForm.FormShow(Sender: TObject);
begin
OpenDialog1.Title:='选择文件';
OpenDialog1.Filter:='Office 文档|*.doc;*.pps;*.xls|所有文档|*.*';
OpenDialog1.FilterIndex:=0;
yn:=true;
ToolButton2.Enabled:=false;
ToolButton5.Enabled:=false;
end;
procedure TWdForm.N2Click(Sender: TObject);
var shuju:PMyData;
i:integer;
sid,ss,st:string;
begin
if treeview1.Selected=nil then exit;
if treeview1.Items.Count=0 then exit;
with ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select path1 from table2 where xh=:xh');
idh:=integer(pmydata(treeview1.Selected.data^));
Parameters.ParamByName('xh').Value:=inttostr(idh);
open;
ss:=Fields[0].AsString;
if ss<>'' then
begin
showmessage('当前节点已是最后节点,不能增加子节点,如要增加请删除保存的文件路径!');
exit;
end;
yn:=false;
close;
sql.Clear;
sql.Add('select id from table2 where xh=:xh');
idh:=integer(pmydata(treeview1.Selected.data^));
Parameters.ParamByName('xh').Value:=inttostr(idh);
open; //得到当前结点id号,就是录入数据的父结点
ss:=Fields[0].AsString;
Close;
sql.Clear;
sql.Add('select id from table2 where parentId='+''''+ss+''''+' order by id');
open;
Last;
sid:=Fields[0].Asstring;
if sid<>'' then //有子结点
begin
i:=strToInt(Fields[0].AsString);
i:=i+1;
//st:=Fields[0].AsString;
st:='000'+IntToStr(i); //重到录入数据的id号
end
else
begin //没有子结点
st:=ss+'0001';
end;
close;
sql.Clear;
sql.Add('insert into table2(id,name,parentId) values('+''''+st+''''+','+''''
+'新的文档'+''''+','+''''+ss+''''+')');
try
begin
ADOConnection1.BeginTrans;
ExecSQL;
ADOConnection1.CommitTrans;
end;
except
begin
ADOConnection1.RollbackTrans;
MessageDlg('操作执行失败,请检查后重新执行',mtError,[mbok],0);
exit;
end;
end;
close;
SQL.Clear;
SQL.Add('select xh from table2 where id='+''''+st+'''');
open;
new(shuju); //把录入数据的序号赋值给对就的treeview结点的data
shuju^.nIndex:=Fields[0].AsInteger;
nodel:=TreeView1.Items.AddChild(TreeView1.Selected,'新的文档');
Treeview1.Selected:=nodel;
nodel.Data:=shuju;
yn:=true;
end;
end;
procedure TWdForm.ToolButton3Click(Sender: TObject);
var
ss:string;
begin
nodel:=TreeView1.Selected;
if nodel.Data<>nil then
begin
ss:=edit1.Text;
ADOQuery2.Close; //treeview 内容发生改变后,通过DATA属性对数据库中对应记录进行相应的改变
adoquery2.SQL.Clear;
adoquery2.SQL.add('update table2 set path1='+''''+ss+''''+','+'name='+''''+nodel.Text+''''+' where xh=:xh') ;
idh:=integer(pmydata(nodel.data^));
ADOQuery2.Parameters.ParamByName('xh').Value:=inttostr(idh);
try
begin
ADOConnection1.BeginTrans;
ADOQuery2.ExecSQL;
ADOConnection1.CommitTrans;
end;
except
begin
ADOConnection1.RollbackTrans;
MessageDlg('操作执行失败,请检查后重新执行',mtError,[mbok],0);
exit;
end;
end;
ADOQuery2.Close;
end;
end;
procedure TWdForm.FormCreate(Sender: TObject);
begin
ADOConnection1.Connected:=true;
GetNode ;
end;
procedure TWdForm.GetNode;//从数据库中取数据动态生成树形结构
var
parent:string; //父级代码
qi,hi,i,tmpi:integer;
myshuju: PMyData;
begin
TreeView1.Items.Clear;
// ADOConnection1.Connected:=True;
adoquery1.Close;
ADOQuery1.SQL.Clear;
adoquery1.SQL.Add('select id,name,parentid,xh from table2 order by id');
ADOQuery1.open; //所有记录列表
ADOQuery1.First;
while not adoquery1.Eof do
begin
parent:=ADOQuery1.Fields[2].AsString;
if parent='' then
begin
new(myshuju);
myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
rootNode:=TreeView1.Items.Add(nil,ADOQuery1.Fields[1].asstring);
rootNode.ImageIndex:=0;
rootNode.SelectedIndex:=0;
Nodel:=rootNode;
Nodel.Data:=myshuju; //创建根内容
//i:=integer(pmydata(Nodel.Data^));
// showmessage(inttostr(i));
qi:=length(ADOQuery1.Fields[0].asstring);//得到当前记录ID的长度
ADOQuery1.Next;
end
else
begin
hi:=length(ADOQuery1.Fields[0].asstring);//得到下一条记录ID的长度
if hi>qi then //下一条记录长度大于前一条记录,则为下级记录
begin
new(myshuju);
myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
TmpNode:=TreeView1.Items.AddChild(nodel,ADOQuery1.Fields[1].asstring);
qi:=hi;//length(ADOQuery1.Fields[0].asstring);
//TreeView1.Selected:=TmpNode; 如果
nodel:=tmpNode;
nodel.Data:=myshuju;
ADOQuery1.next;
end
else
if hi=qi then //记录ID长度相等,则为同级记录
begin
new(myshuju);
myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
TmpNode:=TreeView1.Items.AddChild(nodel.Parent,ADOQuery1.Fields[1].asstring);
//TreeView1.Selected:=TmpNode;
qi:=hi;
nodel:=TmpNode;
nodel.Data:=myshuju;
ADOQuery1.next;
end
else
begin //为上级记录
//leveli:=Nodel.Level+1; //当前记录的层次
tmpi:=round((qi-hi)/4);//两条记录相差层数
for i:=0 to tmpi do
begin
nodel:=nodel.Parent;//得到当前记录的上一个层次
end;
new(myshuju);
myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
TmpNode:=TreeView1.Items.AddChild(nodel,ADOQuery1.Fields[1].asstring);
qi:=hi;
//TreeView1.Selected:=TmpNode;
nodel:=TmpNode;
nodel.Data:=myshuju;
ADOQuery1.next;
end;
end;
end;
{adoquery1.Close;
ADOQuery1.SQL.Clear;
adoquery1.SQL.Add('select id,name from table2 where parentid='' order by id');
ADOQuery1.open; //得到根内容
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
rootNode:=TreeView1.Items.Add(nil,ADOQuery1.Fields[1].asstring);
rootNode.ImageIndex:=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -