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

📄 sys_sysmenu.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      s:=copy(Sourceid,length(Sourceid)-1,2);
      tArgetid:=copy(brOtherBack[i],1,length(brOtherBack[i])-2)+
              prefixofstr(inttostr(strtoint(s)+1),'0',2);
      ChangeID(Sourceid,tArgetid,False);
    end;
  end;
end;

procedure TFrm_Sys_SysMenu.Changerecdel(fidstring,Sourceid: string);
var
  i,Count:integer;
  s,tArgetid:string;
  brOtherBack:Array[1..99] of string;//比当前id大的兄弟,如mn01以后的兄弟有mn02,mn03,mn04(假设存在)
begin
  with AdoQry_tmp2 do
  begin
    Count:=0;
    First;
    while not eof do
    begin
      if (fieldbyname('PSysMenuCode').AsString =fidstring)and
         (fieldbyname('SysMenuCode').AsString>Sourceid) then
      begin
        Inc(Count);
        brOtherBack[Count]:=fieldbyname('SysMenuCode').AsString;
      end;
      next;
    end;
    delcurrec('delete from SysMenuAccessCtrl '+
              'where SysMenuId='+IntToStr(Lc_SysMenuId)+'');
    delcurrec('delete from ReportCtrl '+
              'where SysMenuId='+IntToStr(Lc_SysMenuId)+'');
    delcurrec('delete from SysMenu '+
              'where SysMenuId='+IntToStr(Lc_SysMenuId)+'');
    for i:=1 to Count do
    begin
      Sourceid:=brOtherBack[i];
      s:=copy(Sourceid,length(Sourceid)-1,2);
      tArgetid:=copy(brOtherBack[i],1,length(brOtherBack[i])-2)+
              prefixofstr(inttostr(strtoint(s)-1),'0',2);
      ChangeID(Sourceid,tArgetid,True);
    end;
  end;
end;

procedure TFrm_Sys_SysMenu.btn_CancelClick(Sender: TObject);
begin
  Treeview1.SetFocus;
  Edt_SysMenuCode.enabled:=False;
  btn_ok.enabled:=False;
  btn_Cancel.enabled:=False;
  panel1.visible:=False;
  tlbtn_Add.enabled:=True;
  if Treeview1.selected.text<>'Root' then
    refreshedits;
end;

procedure TFrm_Sys_SysMenu.set_Treeview_after_ok;
var
  node,Parentnode:ttreenode;
  s,Sourceid,tArgetid:string;
begin
  isfound:=False;
  findnode(Treeview1.Items[0]);
  if not isfound then
  begin
    find_Addnode(Treeview1.Items[0].GetLastChild);
    exit;
  end;
  node:=Treeview1.selected;
  if getCode(Treeview1.selected.text)>Trim(Edt_SysMenuCode.text)then
    find_Addnode(node.Parent.GetPrevChild(node))
  else
  begin
    Parentnode:=node.Parent;
    while node<>nil do
    begin
      Sourceid:=GetCode(node.text);
      s:=copy(Sourceid,length(Sourceid)-1,2);
      s:=prefixofstr(inttostr(strtoint(s)+1),'0',2);
      tArgetid:=copy(Sourceid,1,length(Sourceid)-2)+s;
      Changenode(node,Sourceid,tArgetid);
      node:=Parentnode.GetNextChild(node);
    end;
    node:=Treeview1.Items.AddChild(Parentnode,Trim(Edt_SysMenuCode.text)+' '+Edt_SysMenuName.text);
    Parentnode.AlphaSort;
    node.selected:=True;
    Treeview1.setfocus;
  end;
end;

procedure TFrm_Sys_SysMenu.set_Treeview_after_Delete;
var
  node,Parentnode:ttreenode;
  s,Sourceid,tArgetid:string;
begin
  Parentnode:=Treeview1.selected.Parent;
  node:=Parentnode.GetNextChild(Treeview1.selected);
  if node<>nil then
  begin
    Treeview1.Items.Delete(Treeview1.selected);
    node.selected:=True;
    Treeview1.setfocus;
  end
  else if Parentnode.GetprevChild(Treeview1.selected)<>nil then
  begin
    node:=Parentnode.GetprevChild(Treeview1.selected);
    Treeview1.Items.Delete(Treeview1.selected);
    node.selected:=True;
    Treeview1.setfocus;
    exit;
  end
  else
  begin
    Treeview1.Items.Delete(Treeview1.selected);
    node:=Parentnode;
    node.selected:=True;
    Treeview1.setfocus;
    exit;
  end;
  while node<>nil do
  begin
    Sourceid:=GetCode(node.text);
    s:=copy(Sourceid,length(Sourceid)-1,2);
    s:=prefixofstr(inttostr(strtoint(s)-1),'0',2);
    tArgetid:=copy(Sourceid,1,length(Sourceid)-2)+s;
    Changenode(node,Sourceid,tArgetid);
    node:=Parentnode.GetNextChild(node);
  end;
end;

procedure TFrm_Sys_SysMenu.findnode(node: ttreenode);
begin
  if (node.Text>=Trim(Edt_SysMenuCode.text))and(node.text<>'Root')then
  begin
    isfound:=True;
    Treeview1.Selected:=node;
    exit;
  end;
  node:=node.getFirstChild;
  while(node<>nil)and (not isfound) do
  begin
    findnode(node);
    node:=node.Parent.GetNextChild(node);
  end;

end;

procedure TFrm_Sys_SysMenu.find_Addnode(node: ttreenode);
var
  nodeselceted:ttreenode;//要选中的节点
begin
  while length(GetCode(node.text))<>length(Trim(Edt_SysMenuCode.text))do
  begin
    if node.GetLastChild=nil then
      break
    else
      node:=node.GetLastChild;
  end;
  if length(GetCode(node.text))<>length(Trim(Edt_SysMenuCode.Text)) then
  begin
    node:=Treeview1.Items.AddChild(node,Trim(Edt_SysMenuCode.Text)+' '+Edt_SysMenuName.Text);
    node.selected:=True;
    Treeview1.setfocus;
  end
  else
  begin
    nodeselceted:=Treeview1.Items.AddChild(node.Parent,Trim(Edt_SysMenuCode.Text)+' '+Edt_SysMenuName.Text);
    node.Parent.AlphaSort;
    nodeselceted.selected:=True;
    Treeview1.setfocus;
  end;
end;

procedure TFrm_Sys_SysMenu.Changenode(node: ttreenode; Sourceid,
  tArgetid: string);
var
  s:string;
begin
  s:=node.text;
  delete(s,1,length(Sourceid));
  node.text:=tArgetid+s;
  node:=node.getFirstChild;
  while node<>nil do
  begin
    Changenode(node,Sourceid,tArgetid);
    node:=node.Parent.GetNextChild(node);
  end;
end;

procedure TFrm_Sys_SysMenu.tlbtn_AddClick(Sender: TObject);
begin
  panel1.visible:=True;
  tlbtn_Add.enabled:=False;
  tlbtn_Delete.enabled:=False;
    //已经是增加状态,不允许再增加、删除
  setedits(True,True,True);
  Edt_SysMenuCode.setfocus;
  Edt_SysMenuCode.selectall;
  btn_ok.enabled:=True;
  btn_Cancel.enabled:=True;
end;

procedure TFrm_Sys_SysMenu.tlbtn_ConditionClick(Sender: TObject);
begin
  formactivate(sender);
end;

procedure TFrm_Sys_SysMenu.check(sender:tobject);
var
  fidstring,prestring,s,ss:string;//父id;编码的前一个id,如mn02的前一个id是mn01
  fidflag,preflag:boolean;  //父id和编码的前一个id是否存在
  controlName:string;
  okbutton:boolean;
  i,errCode:integer;
begin
  // ok button时每项都要检查
  okbutton:=False;
  checkResult:=True;
  if (sender is tcustomedit) or (activecontrol is tbutton) then
  begin
    if activecontrol is tbutton then
    begin
      if (activecontrol as tbutton).Name='btn_ok' then
        okbutton:=True;
    end
    else
      controlName:=(sender as tcustomedit).Name;
    if (controlName='Edt_SysMenuCode') or (okbutton) then
    begin
      if Edt_SysMenuCode.Text='' then
      begin
        Application.MessageBox(' 菜单代码不能为空! ','错误提示',MB_OK+mb_Iconstop);
        Edt_SysMenuCode.text:='mn';
        checkResult:=False;
        exit;
      end;
      if length(Edt_SysMenuCode.Text)<4 then
      begin
        Application.MessageBox('  代码长度不规范!  ','错误提示',MB_OK+mb_Iconstop);
        checkResult:=False;
        exit;
      end;
      if Trim(Edt_SysMenuCode.Text) <> Lc_OldCode then      //没有改变id
      begin
        fidflag:=False;
        preflag:=False;
        s:=Trim(Edt_SysMenuCode.text);
        if length(s)=4 then
        begin
          fidstring:='';
          fidflag:=True;
        end
        else
          fidstring:=copy(s,1,length(s)-2);
        ss:=copy(s,length(s)-1,2);
        val(ss,i,errCode);
        if errCode<>0 then
        begin
          Application.MessageBox('  代码中含有非法字符!  ','错误提示',MB_OK+mb_Iconstop);
          checkResult:=False;
          exit;
        end;
        if ss='01' then
          preflag:=True
        else
          prestring:=copy(s,1,length(s)-2)+prefixofstr(inttostr(strtoint(ss)-1),'0',2);
        with AdoQry_Tmp2 do
        begin
          if Locate('SysMenuCode',fidstring,[]) then
            fidflag:=True;
          if Locate('SysMenuCode',prestring,[]) then
            preflag:=True;
        end;//endwith
        if not(fidflag) then
        begin
          Application.MessageBox('  还没有上级菜单,不允许新增!  ','错误提示',MB_OK+mb_Iconstop);
          checkResult:=False;
          exit;
        end;
        if not(preflag) then
        begin
          Application.MessageBox('  菜单代码不连续!  ','错误提示',MB_OK+mb_Iconstop);
          checkResult:=False;
          exit;
        end;
      end;
    end;

    if (controlName='Edt_SysMenuName') or (okbutton) then
    begin
      if Edt_SysMenuName.Text='' then
      begin
        Application.MessageBox('  菜单名称不能为空!  ','错误提示',MB_OK+mb_Iconstop);
        checkResult:=False;
        exit;
      end
      else if Edt_SysMenuName.Text='Root' then
      begin
        Application.MessageBox(' "Root"是系统保留名称,不能使用! ','错误提示',MB_OK+mb_Iconstop);
        checkResult:=False;
        exit;
      end;
    end;
  end;
end;

procedure TFrm_Sys_SysMenu.Edt_SysMenuCodeExit(Sender: TObject);
begin
  if (activecontrol=btn_Cancel) or
     (activecontrol=Treeview1)  or
     ((activecontrol.tabOrder<(sender as twincontrol).tabOrder)
       and (activecontrol.Parent=(sender as twincontrol).Parent)) then
    exit;
  check(sender);
  if not checkResult then
    activecontrol:=(sender as twincontrol);
end;

//设置各个edit的maxlength
procedure TFrm_Sys_SysMenu.seteditmaxlen;
begin
end;

procedure TFrm_Sys_SysMenu.Treeview1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  inherited;
  if (key=ord('D')) and (shift-[sSalt]-[ssshift]+[sSCtrl]=shift) then
    tlbtn_DeleteClick(Sender);
end;

procedure TFrm_Sys_SysMenu.cbx_fileClick(Sender: TObject);
begin
  inherited;
  edt_Cmbbx_Change(sender);
end;

procedure TFrm_Sys_SysMenu.InitForm(AdOConnection: TAdOConnection;
  ReadOnly: Boolean);
begin
  inherited;
  AdoQry_Tmp1.Connection:=AdoConnection;
  AdoQry_Tmp2.Connection:=AdoConnection;
  AdoQry_Check.Connection:=AdoConnection;
end;

function TFrm_Sys_SysMenu.prefixofstr(s:string;chr:chAr;len:integer):string;
begin
  Result:=Trim(s);
  Result:=stringofchAr(chr,len-length(Result))+Result;
end;


procedure TFrm_Sys_SysMenu.tlbtn_exitClick(Sender: TObject);
begin
  inherited;
  Close;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -