📄 untdptemp.pas
字号:
NewNode := TreeView1.Items.AddChild(node, oldnode.Text);
NewNode.StateIndex := oldnode.StateIndex;
NewNode.SelectedIndex := oldnode.SelectedIndex;
NewNode.ImageIndex := oldnode.ImageIndex;
node := newnode;
node1 := newnode;
node2 := oldnode;
//下面就判断oldnode结点有没有子结点,如果有的话就到该结点的第一个结点,相应加入此结点,
//如果没有子结点的话,就用getnext得到该结点的下一个结点,相应把该结点加进去
oldnode := oldnode.getFirstChild;
while oldnode <> nil do
begin
NewNode := TreeView1.Items.AddChild(node, oldnode.Text);
//利用StateIndex保存部门代码或人员的流水号
NewNode.StateIndex := oldnode.StateIndex;
NewNode.SelectedIndex := oldnode.SelectedIndex;
NewNode.ImageIndex := oldnode.ImageIndex;
if oldnode.HasChildren then
begin
oldnode := oldnode.getFirstChild;
node := newnode;
end
else
begin
iNodelevel := oldnode.Level;
oldNode := oldNode.GetNext;
//如果结点的下一个结点为空或下一个结点的层次小于原来oldnode结点的层次退出过程
if (oldnode = nil) or (oldNode.level <= iOldlevel) then
break;
//下一个结点与上个结点层次的差数
iCount := iNodelevel - oldnode.Level;
//根据层数确定下个结点对应的父结点
if iCount <> 0 then
begin
for iNumber := 1 to iCount do
node := node.Parent;
end;
end;
end;
//新加的结点处于选中状态,旧结点删除
node1.Selected := true;
node2.Delete;
end;
procedure TfrmDptEmp.miAddDptClick(Sender: TObject);
begin
btnAddDptClick(nil);
end;
function TfrmDptEmp.CheckEmpcode(Empcode: string): boolean;
begin
if Empcode = '' then
begin
application.MessageBox('员工的用户名必须输入!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
frameEmp.dedtUserName.SetFocus;
exit;
end;
tblEmp.Filter := 'UserName=''' + Empcode + '''';
tblEmp.Filtered := true;
try
tblEmp.Active := true;
if tblEmp.IsEmpty then
result := true
else
result := false;
except
on E: Exception do
begin
ErrorHandler(E, 'frmDptEmp.CheckEmpcode');
Application.MessageBox('打开部门数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
end;
end; //try
end;
procedure TfrmDptEmp.miAddEmpClick(Sender: TObject);
begin
btnAddEmpClick(nil);
end;
procedure TfrmDptEmp.mideleteClick(Sender: TObject);
begin
bntDeleteClick(nil);
end;
procedure TfrmDptEmp.miModifyClick(Sender: TObject);
begin
btnmodifyClick(nil);
end;
procedure TfrmDptEmp.TreeView1DragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
accept := true;
end;
procedure TfrmDptEmp.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
ConvertKey(ActiveControl, HANDLE, Key, Shift);
end;
procedure TfrmDptEmp.mifreshClick(Sender: TObject);
begin
Treeview1.Items.Clear;
createtreeview;
end;
procedure TfrmDptEmp.edtdptmanageDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := true;
end;
procedure TfrmDptEmp.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := caFree;
end;
procedure TfrmDptEmp.TreeView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 13 then
treeView1.Selected.Expanded := not treeView1.Selected.Expanded;
end;
procedure TfrmDptEmp.Displayinfo(datasetname: tdataset; fieldyname: array of string;
Controlname: array of TWincontrol);
var i: integer;
begin
for i := 0 to high(controlname) do
begin
if controlname[i] is Tstatictext then
Tstatictext(controlname[i]).caption := datasetname.fieldbyname(fieldyname[i]).asvariant
else if controlname[i] is Tedit then
Tedit(controlname[i]).text := datasetname.fieldbyname(fieldyname[i]).asvariant
else if controlname[i] is tcombobox then
tcombobox(controlname[i]).text := datasetname.fieldbyname(fieldyname[i]).asvariant;
end;
end;
procedure TfrmDptEmp.FrameDptdedtDptNameChange(Sender: TObject);
begin
FrameDpt.dedtDptNameChange(Sender);
end;
procedure TfrmDptEmp.FrameDptedtupDptmanegerDragDrop(Sender,
Source: TObject; X, Y: Integer);
begin
if (Source is Ttreeview) then
begin
frameDpt.cbxupDptmaneger.Text := treeview1.Selected.text;
frameDpt.cbxupDptmaneger.SetFocus;
// iDptmaneger := treeview1.Selected.StateIndex;
end;
end;
procedure TfrmDptEmp.FrameDptedtupDptmanegerDragOver(Sender,
Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
accept := true;
end;
procedure TfrmDptEmp.bbtnAddDptClick(Sender: TObject);
var
node, newnode: TTreeNode;
iMaxDptid: integer;
begin
bAdd := true;
frameDpt.Visible := true;
frameEmp.Visible := false;
node := TreeView1.Selected; //得到选择结点的父结点
if node = nil then
iSelectnodeparent := 0
else
iSelectnodeparent := node.StateIndex; //得到该父结点的所对应的部门代码
newnode := TreeView1.Items.AddChild(Node, ''); //在该父结点上增加新的结点
NewNode.SelectedIndex := 0;
NewNode.ImageIndex := 1;
// frameDpt.tblDpt.DisableControls;
newnode.Selected := true;
// frameDpt.dedtDptName.SetFocus;
ClearCtrl([frameDpt]);
SetCtrlStatus([frameDpt], true);
//得到部门表中得到最大的部门代码
try
qryDptEmp.Active := false;
qryDptEmp.SQL.Clear;
qryDptEmp.SQL.Add('select isnull(Max(DptId),1) as maxDptId from Department');
qryDptEmp.Active := true;
iMaxDptid := qryDptEmp.FieldByname('maxDptId').asinteger + 1;
frameDpt.stcDepcode.Caption := inttostr(iMaxDptid);
frameDpt.stcupDptName.Caption := node.Text;
bbtnOk.Enabled := true;
bbtnCancel.Enabled := true;
except
on E: Exception do
begin
ErrorHandler(E, 'TfrmDptEmp.btnAddDptClick');
Application.MessageBox('打开部门数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
end;
end;
NewNode.StateIndex := iMaxDptid;
bbtnAddDpt.Enabled := false;
bbtnAddEmp.Enabled := false;
bbntDelete.Enabled := false;
bbtnmodify.Enabled := false;
frameDpt.tblDpt.Append;
frameDpt.dedtDptName.SetFocus;
// pnlTree.Enabled := false;
end;
procedure TfrmDptEmp.bbtnAddEmpClick(Sender: TObject);
var
node, newnode: TTreeNode;
begin
bAdd := true; //处于增加状态
frameDpt.Visible := false;
frameEmp.Visible := true;
node := TreeView1.Selected; //得到该结点的父结点
if node = nil then
begin
Application.MessageBox('最上层部门只能为一个,不能在增加!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
exit;
end;
iSelectnodeparent := node.StateIndex; //得到父结点的stateindex属性
//NewNode.StateIndex := tblEmp.FieldByname('USER_ID').asinteger;
newnode := TreeView1.Items.AddChild(Node, ''); //在父结点下增加一个新的结点
NewNode.SelectedIndex := 3;
NewNode.ImageIndex := 2;
// frameEmp.tblEmp.DisableControls;
newnode.Selected := true;
ClearCtrl([frameEmp]);
SetCtrlStatus([FrameEmp], true);
frameEmp.stcEmpDpt.Caption := node.Text; //隶属部门显示为新加结点的父结点的text属性
// frameEmp.dedtName.SetFocus;
//得到员工的最大流水号增加1为新加员工的流水号
try
qryDptEmp.Active := false;
qryDptEmp.SQL.Clear;
qryDptEmp.SQL.Add('select isnull(Max(USER_ID),1) as maxEmpId from OA');
qryDptEmp.Active := true;
iMaxEmpid := qryDptEmp.FieldByname('maxEmpId').asinteger + 1;
NewNode.StateIndex := iMaxEmpid;
bbtnOk.Enabled := true;
bbtnCancel.Enabled := true;
except
on E: Exception do
begin
ErrorHandler(E, 'frmDptEmp.btnAddEmpClick');
Application.MessageBox('打开人员数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
end;
end;
NewNode.StateIndex := iMaxEmpid;
bbtnAddDpt.Enabled := false;
bbtnAddEmp.Enabled := false;
bbntDelete.Enabled := false;
bbtnmodify.Enabled := false;
frameEmp.tblEmp.Append;
frameEmp.dedtName.SetFocus;
// pnlTree.Enabled := false;
end;
procedure TfrmDptEmp.bbntDeleteClick(Sender: TObject);
var
delete_node: TTreeNode;
begin
if (TreeView1.Selected = nil) then
exit;
delete_node := treeView1.Selected;
nodeSelect := treeview1.Selected.Parent;
if delete_node.HasChildren then
begin //有子树则先处理子节点
application.MessageBox(Pchar(delete_node.text + '部门下还有员工' + #13 + '或子部门,不能删除!'), Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
end
else
begin
DeleteNode;
if nodeselect <> nil then
begin
nodeselect.Selected := true;
showselectdp(treeview1.Selected);
end;
end;
end;
procedure TfrmDptEmp.bbtnmodifyClick(Sender: TObject);
begin
if frameDpt.visible then
begin
SetCtrlStatus([frameDpt], true);
frameDpt.dedtDptName.SetFocus;
frameDpt.tblDpt.Edit;
end
else
begin
SetCtrlStatus([FrameEmp], true);
frameEmp.dedtName.SetFocus;
sUserName := frameEmp.dedtUserName.Text;
frameEmp.tblEmp.Edit;
end;
bEdit := true;
bbtnOk.Enabled := true;
bbtnCancel.Enabled := true;
bbtnAddDpt.Enabled := false;
bbtnAddEmp.Enabled := false;
bbntDelete.Enabled := false;
bbtnmodify.Enabled := false;
// pnlTree.Enabled := false;
end;
procedure TfrmDptEmp.bbtnOkClick(Sender: TObject);
var
newnode: TTreeNode;
begin
if bAdd then //判断是否出去增加状态
begin
//增加部门记录
if frameDpt.Visible then
begin
try
{if frameDpt.cbxDptmaneger.Text <> '' then
begin
newnode := treeview1.Selected;
newnode := TreeView1.Items.AddChild(newNode, frameDpt.cbxDptmaneger.Text); //在该父结点上增加新的结点
NewNode.SelectedIndex := 3;
NewNode.ImageIndex := 2;
qryDptEmp.Active := false;
qryDptEmp.SQL.Clear;
qryDptEmp.SQL.Add('select isnull(Max(EmpID),0) as maxEmpId from OA');
qryDptEmp.Active := true;
iMaxEmpid := qryDptEmp.FieldByname('maxEmpId').asinteger + 1;
bbtnCancel.Enabled := true;
bbtnOk.Enabled := true;
NewNode.StateIndex := iMaxEmpid;
tblEmp.Active := true;
tblEmp.Append;
tblEmp.FieldByname('EmpID').asinteger := iMaxEmpid;
tblEmp.FieldByname('Name').asstring := frameDpt.cbxDptmaneger.Text;
tblEmp.post;
frameDpt.tblDpt.fieldbyname('Dptmaneger').asinteger := iMaxEmpid;
end; }
frameDpt.tblDpt.FieldByname('DptId').asinteger := strtoint(frameDpt.stcDepcode.Caption);
frameDpt.tblDpt.FieldByname('upDptID').asinteger := iSelectnodeparent;
if tblEmp.Locate('name', frameDpt.cbxupDptmaneger.text, []) then
frameDpt.tblDpt.FieldByname('upDptmaneger').asinteger := tblEmp.FieldByname('USER_ID').asinteger;
//frameDpt.tblDpt.FieldByname('Dptmaneger').asstring := EmpNametoEmpID(frameDpt.edtDptmaneger.text);//tblEmp.FieldByname('EmpID').asinteger;
frameDpt.tblDpt.Post;
SetCtrlStatus([frameDpt], false);
application.MessageBox('增加部门信息保存成功!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
bAdd := false;
except
on E: Exception do
begin
ErrorHandler(E, 'TfrmDptEmp.btnOkClick');
Application.MessageBox('增加部门数据表出错!', Pchar(_sAppTitle), MB_ICONERROR + MB_OK);
end;
end;
end
else
//增加人员记录
begin
if (not CheckEmpcode(frameEmp.dedtUserName.Text)) then
begin
if frameEmp.dedtUserName.Text <> '' then application.MessageBox('该员工用户名已被别人使用,请重新输入!', Pchar(_sAppTitle), MB_ICONINFORMATION + MB_OK);
frameEmp.dedtUserName.SetFocus;
exit;
end;
try
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -