⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 untdptemp.pas

📁 是分布式粮库程序,是采用Delphi实现的
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  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 + -