📄 hm_dp.pas
字号:
unit hm_dp;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ImgList, ComCtrls, DB, ADODB, Mask, DBCtrls, ExtCtrls,Math;
type
Thm_dpForm = class(TForm)
TreeView1: TTreeView;
ImageList1: TImageList;
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
ADOQuery1: TADOQuery;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Image1: TImage;
Label6: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit4: TDBEdit;
DBMemo1: TDBMemo;
DBMemo2: TDBMemo;
ADOQuery2: TADOQuery;
DataSource1: TDataSource;
ADOQuery3: TADOQuery;
Label7: TLabel;
Image2: TImage;
StatusBar1: TStatusBar;
ADOQuery4: TADOQuery;
ComboBox1: TComboBox;
ADOQuery1DSDesigner: TIntegerField;
ADOQuery1DSDesigner2: TIntegerField;
ADOQuery1DSDesigner3: TIntegerField;
ADOQuery1DSDesigner4: TIntegerField;
ADOQuery1DSDesigner5: TStringField;
ADOQuery1DSDesigner6: TStringField;
ADOQuery1DSDesigner7: TStringField;
ADOQuery1DSDesigner8: TStringField;
ADOQuery1DSDesigner9: TStringField;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TreeView1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure DBEdit3Exit(Sender: TObject);
procedure ADOQuery2AfterOpen(DataSet: TDataSet);
procedure ComboBox1Select(Sender: TObject);
private
Name: string;
procedure CreateTreeNodes(Sender: TObject; Node: TTreeNode);
procedure SetMen(const AName,ADP: string);//载入每个部门所有的姓名
procedure ValidMen(const AExceptMen: string);//过滤出无职务的每个部门所有的姓名
procedure ValidButton;
public
{ Public declarations }
end;
type
TTable=array[1..2000,1..2] of string;
TIndexTable=array[1..2000,1..1] of integer;
var
hm_dpForm: Thm_dpForm;
pnode:TTreeNode;//pnode为树节点类型的变量
//--------------用于记录部门的部分信息 ---------------
temptable:TTable;//记录部门的在树中节点的绝对编号,以及每个部门的最大子部门编号
indextable:TIndexTable;//与temptable相反,记录树中节点对应的部门号
pnum,snum:integer;
sname:string;
ItemLevel:integer;
implementation
uses hm_main, hm_login;
{$R *.dfm}
//--------------窗口生成时,对普通用户封锁编辑类选项-------------
procedure Thm_dpForm.FormCreate(Sender: TObject);
begin
if hm_loginForm.idright < 2 then
begin
Button1.Enabled:=false;
Button2.Enabled:=false;
Button3.Enabled:=false;
Button4.Enabled:=false;
end;
end;
//--------部门管理窗口关闭时,显示主窗口--------------
procedure Thm_dpForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
hm_mainForm.Visible:=true;
end;
//--------部门组织图TreeView1节点被点击时,更新右侧部门详细信息------
procedure Thm_dpForm.TreeView1Click(Sender: TObject);
begin
if not Assigned(treeview1.Selected) then Exit;
ADOQuery2.close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Text := 'select * from 部门信息 where 编号 ='+inttostr(indextable[treeview1.Selected.AbsoluteIndex+1,1]);
ADOQuery2.Open;
SetMen(Trim(adoquery2.FieldByName('负责人').AsString),Trim(treeview1.Selected.Text));
ValidButton;
end;
//----------部门管理窗口显示时,更新部门组织图TreeView1----------
procedure Thm_dpForm.FormShow(Sender: TObject);
begin
//DBEdit4.Enabled := False;
//DBEdit2.Enabled := False;
//
CreateTreeNodes(nil,nil);
if Treeview1.ITems.Count > 0 then
treeview1.Items[0].Selected := True;
TreeView1Click(nil);
Button6Click(nil);//显示时,界面还原
end;
//----------自定义过程,生成部门组织图TreeView1
procedure Thm_dpForm.CreateTreeNodes(Sender: TObject; Node: TTreeNode);
var
temptableIndex: Integer;
begin
//如果组织图已存在,则清除
if treeview1.Items.Count > 0 then
begin
treeview1.Items.Clear;//treeview1.Items.Item[0].Delete;
end;
//重新读入部门信息
adoquery1.Close;
adoquery1.Open;
while not adoquery1.Eof do //表不空
begin
try
pnum:=adoquery1.FieldByName('父编号').AsInteger;
snum:=adoquery1.FieldByName('编号').AsInteger;
sname:=adoquery1.FieldByName('名称').AsString;
ItemLevel:=adoquery1.FieldByName('层次').AsInteger;
temptable[snum,2]:= adoquery1.FieldByName('最大子号').AsString;
if (ItemLevel=0) then//如果是第一个节点,那么它没有父节点,其父节点是nil(空),创建第一个节点的数据
begin
//父编号=编号....层次最高
pnode := treeview1.Items.Add(nil,sname);//pnode:=treeview1.Items.AddFirst(nil,sname);
end
else
begin //根据记录的父节点在树中的编号,依次将记录插入图中
temptableIndex := strtoint(temptable[pnum,1]);
pnode:=treeview1.Items.Item[temptableIndex];
pnode:=treeview1.Items.AddChild(pnode,sname);
end;
try
indextable[pnode.AbsoluteIndex+1,1]:=snum;
temptable[snum,1]:=inttostr(pnode.AbsoluteIndex);
except
end;
finally
adoquery1.Next;
end;
end;
end;
//---------选择增加子部门 ---------------
procedure Thm_dpForm.Button1Click(Sender: TObject);
var
S: string;
begin
S := Trim(DBEdit4.Text);
Button5.Visible:=true;
Button6.Visible:=true;
Button1.Enabled:=false;
Button2.Visible:=false;
Button3.Visible:=false;
Button4.Visible:=false;
//记录当前的部门编号,也就是新增子部门的上级编号
pnum:=adoquery2.FieldByName('编号').AsInteger;
//由当前部门的最大子号 以及层次信息,生成新增子部门的编号
snum:=adoquery2.FieldByName('最大子号').AsInteger;
ItemLevel:=adoquery2.FieldByName('层次').AsInteger+1;
snum:=snum+strtoint(floattostr(intpower(10,3-ItemLevel)));
//设置为插入状态
adoquery2.Append;
//显示新增子部门的编号,并不允许编辑
DBEdit2.EditText:=inttostr(snum);
DBEdit2.Enabled:=false;
DBEdit4.Text := S;
SetMen(ComboBox1.Text,'');
ValidMen('');
end;
//---------选择增加同级部门 ---------------
procedure Thm_dpForm.Button2Click(Sender: TObject);
var
sLevel, sParent,S: string;
begin
S := Trim(DBEdit4.Text);
Button5.Visible:=true;
Button6.Visible:=true;
Button2.Enabled:=false;
Button1.Visible:=false;
Button3.Visible:=false;
Button4.Visible:=false;
sLevel := '0';
sParent := '1000';
pnum := 1000;
snum := 1000;
if ADOQuery2.Active then
begin
if ADOQuery2.RecordCount > 0 then
begin
sLevel := Trim(adoquery2.FieldByName('层次').AsString);
sParent := Trim(adoquery2.FieldByName('父编号').AsString);
ADOQuery3.Close;
if StrtoInt(sLevel) = 0 then
ADOQuery3.Sql.Text := 'Select Max(编号) as 编号 From 部门信息 Where 层次 =' + QuotedStr(sLevel)
else
ADOQuery3.Sql.Text := 'Select Max(编号) as 编号 From 部门信息 Where 层次 =' + QuotedStr(sLevel) + ' and 父编号 = ' + QuotedStr(sParent);
ADOQuery3.Open;
//记录当前的部门的父编号,也就是新增子部门的上级编号
pnum:= ADOQuery3.FieldByName('编号').AsInteger;
//由父部门的最大子号 以及层次信息,生成新增子部门的编号
snum:=strtoint(temptable[pnum,2]);
ItemLevel:=adoquery2.FieldByName('层次').AsInteger;
snum:=snum+strtoint(floattostr(intpower(10,3-ItemLevel)));
if StrtoInt(sLevel) = 0 then
pnum := snum;
end
end
else
begin
ADOQUery2.Close;
ADOQUery2.SQL.Clear;
ADOQUery2.SQL.Text := 'Select * From 部门信息 Where 编号 like ''XXX''';
ADOQUery2.Open;
end;
ADOQuery2.Append;
//显示新增子部门的编号,并不允许编辑
DBEdit2.EditText:=inttostr(snum);
DBEdit2.Enabled:=false;
DBEdit4.Text := S;
SetMen(ComboBox1.Text,'');
ValidMen('');
end;
//------------选择修改部门信息---------------
procedure Thm_dpForm.Button3Click(Sender: TObject);
begin
Button5.Visible:=true;
Button6.Visible:=true;
Button3.Enabled:=false;
Button1.Visible:=false;
Button2.Visible:=false;
Button4.Visible:=false;
dbedit2.Enabled:=false;
//设置为编辑状态
adoquery2.Edit;
SetMen(ComboBox1.Text,'');
ValidMen(ComboBox1.Text);
end;
//------------------撤销部门--------------------------
procedure Thm_dpForm.Button4Click(Sender: TObject);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -