📄 hz.pas
字号:
unit hz;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ImgList, ComCtrls, Menus, StdCtrls, OleCtrls, SHDocVw, DB, ADODB,
ExtCtrls, ScktComp, DBTables;
type
//自定义一个结构的数据类型
PMyRecord = ^TMyRecord;
TMyRecord = record
ParentNodeID : String; //父节点
NodeID : String; //节点代号
Caption : String; //标题文字
//网址
end;
Thz_f = class(TForm)
TreeView1: TTreeView;
ImageList1: TImageList;
ADOTable1: TADOTable;
ADOConnection1: TADOConnection;
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
GroupBox1: TGroupBox;
Label1: TLabel;
Label3: TLabel;
Label5: TLabel;
Label4: TLabel;
Edit6: TEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Edit8: TEdit;
Label9: TLabel;
Edit9: TEdit;
Edit10: TEdit;
Button1: TButton;
Table1: TTable;
Table2: TTable;
Database1: TDatabase;
Button3: TButton;
StatusBar1: TStatusBar;
PopupMenu1: TPopupMenu;
MenuADD: TMenuItem;
renamenode: TMenuItem;
deletechildnode: TMenuItem;
ADOQuery1: TADOQuery;
refresh: TMenuItem;
procedure TreeView1DblClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit6Change(Sender: TObject);
procedure MenuADDClick(Sender: TObject);
procedure renamenodeClick(Sender: TObject);
procedure deletechildnodeClick(Sender: TObject);
procedure refreshClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
//自定义函数
procedure CreateSubNodes(myNode :TTreeNode);
end;
var
hz_f: Thz_f;
SEV_RESP_WAIT:boolean;
implementation
uses u_add,u_ren,u_del;
{$R *.DFM}
procedure Thz_f.TreeView1DblClick(Sender: TObject);
var
currentnode: ttreenode;
begin
currentnode:=treeview1.selected;
if treeview1.selected.level=1 then
begin
Edit1.Text:=currentnode.Text;
end;
if treeview1.selected.level=2 then
begin
Edit2.Text:=currentnode.Text;
end;
if treeview1.selected.level=3 then
begin
Edit3.Text:=currentnode.Text;
end;
if treeview1.selected.level=4 then
begin
Edit4.Text:=currentnode.Text;
end;
end;
procedure Thz_f.FormCreate(Sender: TObject);
var
//声明指针变量
MyRecordPointer: PMyRecord;
begin
//创建指针变量
New(MyRecordPointer);
//设置根节点的指针变量内容
MyRecordPointer.ParentNodeID := '';
MyRecordPointer.NodeID := 'Root';
MyRecordPointer.Caption := TreeView1.Items[0].Text;
TreeView1.Items[0].Data := MyRecordPointer;
//将数据库的数据写到TTreeView对象中
CreateSubNodes(TreeView1.Items[0]);
end;
//************************************************
//将数据库的内容转到TTreeView对象
//*************************************************
procedure Thz_f.CreateSubNodes(myNode :TTreeNode);
var
//声明指针变量
MyRecordPointer: PMyRecord;
tmpDataSet : TADODataSet;
tmpNode : TTreeNode;
SQLStr : string;
begin
//创建DataSet
tmpDataSet := TADODataSet.Create(nil);
//组合SQL命令,找出指定节点的所有的子节点
SQLStr := ' ParentNodeID = ''' + PMyRecord(myNode.Data)^.NodeID + '''';
//连接数据库
tmpDataSet.Connection := ADOConnection1;
tmpDataSet.CursorType := ctStatic;
tmpDataSet.CursorLocation := clUseClient;
tmpDataSet.CommandText := 'select * from myTTreeView where ' + SQLStr + ' Order by NodeID ';
tmpDataSet.Active := True;
tmpDataSet.First;
While Not tmpDataSet.Eof do begin
//创建Model Node
tmpNode := TreeView1.Items.AddChild(myNode,tmpDataSet.FieldValues['Caption']);
//设置图片属性
tmpNode.ImageIndex := tmpNode.Level + 1;
tmpNode.SelectedIndex := tmpNode.Level + 1;
//创建指针变量
New(MyRecordPointer);
//将相关数据保存到tmpNode
MyRecordPointer.ParentNodeID := tmpDataSet.FieldValues['ParentNodeID'];
MyRecordPointer.NodeID := tmpDataSet.FieldValues['NodeID'];
MyRecordPointer.Caption := tmpDataSet.FieldValues['Caption'];
tmpNode.Data := MyRecordPointer;
//创建子节点(以递归的方式调用)
CreateSubNodes(tmpNode);
tmpDataSet.Next;
end;
//关闭与释放DataSet
tmpDataSet.Active := False;
tmpDataSet.Free;
end;
procedure Thz_f.Button1Click(Sender: TObject);
var data1 ,data2:string;
begin //检查是否输入完全
if(edit1.Text<>'')and(edit2.Text<>'')and(edit3.Text<>'')and (edit4.Text<>'')
and(edit6.Text<>'')and(edit8.Text<>'')and (edit9.Text<>'')and (edit10.Text<>'') then
if not table2.FindKey([edit6.text]) then
showmessage('没有此报修序号,请核查!')
else
begin
with table1 do
//向表中添加数据
table1.Append;
table1.FieldByName('维修系统').AsString :=edit1.text;
table1.FieldByName('系统部件').AsString :=edit2.text;
table1.FieldByName('部件位置').AsString :=edit3.text;
table1.FieldByName('修理情况').AsString :=edit4.text;
table1.FieldByName('报修序号').AsString :=edit6.text;
table1.FieldByName('维修工时').AsString :=edit8.text;
table1.FieldByName('修理句').AsString :=edit2.text+edit3.text+edit4.text;
table1.FieldByName('检验员').AsString :=edit9.text;
table1.FieldByName('维修员').AsString :=edit10.text;
table1.FieldByName('修完时间').AsString :=datetimetostr(now());
// 计算维修耗时
data1:=datetostr(now()-table2.lookup('报修序号',edit6.Text,'报修时间') ) ;
data2:=copy(data1,1,1);
table1.FieldByName('维修耗时').AsString :=inttostr(strtoint(data2)+1);
Table1.post;
//清空对话框
edit1.Text:='' ;
edit2.text:='' ;
edit3.Text:='' ;
edit4.text:='' ;
edit6.text:='' ;
edit8.text:='' ;
edit9.text:='' ;
edit10.text:='' ;
showmessage('你已成功保存新的记录') ;
end
else
showmessage('你没有完全填写数据,请重新填写数据');
end;
procedure Thz_f.Button3Click(Sender: TObject);
begin
close;
end;
procedure Thz_f.Edit6Change(Sender: TObject);
begin
if table2.FindKey([edit6.text]) then
begin
StatusBar1.SimpleText:='报修序号为__'+edit6.Text+'的报修故障:'+table2.lookup('报修序号',edit6.Text,'故障句');
end
else
StatusBar1.SimpleText:='没有此项记录报修情况请核查!';
end;
procedure Thz_f.MenuADDClick(Sender: TObject);
var
//声明指针变量
MyRecordPointer: PMyRecord;
begin
with Tadd.Create(Application) do begin
try
ShowModal;
finally
//假如用户是单击OK按钮,则将数据加以保存
if ModalResult = mrOK then begin
//创建指针变量
New(MyRecordPointer);
//添加新的节点
with TreeView1.Items.AddChild(TreeView1.Selected,EditCaption.Text) do begin
//指定图片
ImageIndex:= Level + 1;
SelectedIndex := Level + 1;
//指定指针变量的内容
MyRecordPointer.ParentNodeID := PMyRecord(TreeView1.Selected.Data)^.NodeID;
MyRecordPointer.NodeID := PMyRecord(TreeView1.Selected.Data)^.NodeID + '-' + IntToStr(TreeView1.Selected.Count);
MyRecordPointer.Caption := EditCaption.Text;
//设置节点的Data属性值
Data := MyRecordPointer;
end;
//将数据保存到数据库
ADOTable1.Append;
ADOTable1.FieldByName('ParentNodeID').AsString := PMyRecord(TreeView1.Selected.Data)^.NodeID;
ADOTable1.FieldByName('NodeID').AsString := PMyRecord(TreeView1.Selected.Data)^.NodeID + '-' + IntToStr(TreeView1.Selected.Count);
ADOTable1.FieldByName('Caption').AsString := EditCaption.Text;
ADOTable1.Post;
end;
Free;
end;
end;
end;
procedure Thz_f.renamenodeClick(Sender: TObject);
begin
with Tren.Create(Application) do begin
try
ShowModal;//显示对话匡
finally
//假如用户是单击OK按钮,则将数据加以保存
if ModalResult = mrOK then begin
with adoquery1 do
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.add('update myTTreeView set caption=:cc Where caption=:bb');//声名2个变量cc ,bb
parameters.parambyname('bb').value:=treeview1.Selected.Text;
parameters.parambyname('cc').value:=reedit.text ;
adoquery1.execsql;
end;
treeview1.selected.Text:=reedit.Text;
end;
end;
end;
end;
procedure Thz_f.deletechildnodeClick(Sender: TObject);
begin
with Tdel.Create(Application) do begin
try
ShowModal;//显示对话匡
finally
//假如用户是单击yes按钮,则将数据加以保存
if ModalResult = mryes then
begin
//从数据库中删除节点
with adoquery1 do
begin
if treeview1.selected.level<>1 then
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.sql.add('delete from myTTreeView Where caption=:aa');//声名一个变量aa
parameters.parambyname('aa').value:=treeview1.Selected.Text;
adoquery1.execsql;
end
else
showmessage('你不删除根目录!');
end;
//在treelist 中删除节点
if (treeview1.Selected.level<>0)and(treeview1.Selected.level<>1) then
treeview1.Items.Delete(treeview1.Selected);
end;
end;
end;
end;
procedure Thz_f.refreshClick(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit6.Text:='';
edit8.Text:='';
edit9.Text:='';
edit10.Text:='';
end;
procedure Thz_f.FormClose(Sender: TObject; var Action: TCloseAction);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit6.Text:='';
edit8.Text:='';
edit9.Text:='';
edit10.Text:='';
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -