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

📄 sys_sysmenu.pas

📁 一个MRPII系统源代码版本
💻 PAS
📖 第 1 页 / 共 3 页
字号:
//张程炜、李靖
unit Sys_SysMenu;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  BaseIme, StdCtrls, ComCtrls, Buttons, ExtCtrls, DBTables, Menus, Db,
  ImgList, ToolWin, ActnList,math, Grids, DBGrids, Base, AdODB;

Type
  TFrm_Sys_SysMenu = Class(TFrm_BaseIme)
    Treeview1: TTreeview;
    Label17: TLabel;
    btn_ok: TButton;
    Label18: TLabel;
    btn_Cancel: TButton;
    ControlBar1: TControlBar;
    ToolBar1: TToolBar;
    tlbtn_expand: TToolButton;
    tlbtn_CollApse: TToolButton;
    tlbtn_Delete: TToolButton;
    tlbtn_exit: TToolButton;
    tlbtn_Add: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    tlbtn_Condition: TToolButton;
    ToolButton5: TToolButton;
    PageControl1: TPageControl;
    tbsht_general: TTabSheet;
    tbsht_PAra: TTabSheet;
    Label20: TLabel;
    Edt_SysMenuCode: TEdit;
    Edt_SysMenuName: TEdit;
    Label21: TLabel;
    Label1: TLabel;
    Edt_FormName: TEdit;
    Label5: TLabel;
    edt_1: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    edt_2: TEdit;
    edt_3: TEdit;
    edt_4: TEdit;
    edt_5: TEdit;
    edt_6: TEdit;
    lbl_ModuleName: TLabel;
    Panel1: TPanel;
    tlbtn_Hint: TToolButton;
    ToolButton4: TToolButton;
    Label2: TLabel;
    edt_7: TEdit;
    Label4: TLabel;
    edt_8: TEdit;
    Label11: TLabel;
    edt_9: TEdit;
    Label12: TLabel;
    edt_10: TEdit;
    AdoQry_Tmp2: TAdoQuery;
    AdoQry_Tmp1: TAdoQuery;
    AdoQry_Check: TAdoQuery;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: ChAr);
    procedure Treeview1Click(Sender: TObject);
    procedure edt_Cmbbx_Change(Sender: TObject);
    procedure btn_okClick(Sender: TObject);
    procedure tlbtn_DeleteClick(Sender: TObject);
    procedure Treeview1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Treeview1Enter(Sender: TObject);
    procedure Edt_SysMenuCodeEnter(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure tlbtn_expandClick(Sender: TObject);
    procedure tlbtn_CollApseClick(Sender: TObject);
    procedure btn_CancelClick(Sender: TObject);
    procedure tlbtn_AddClick(Sender: TObject);
    procedure tlbtn_ConditionClick(Sender: TObject);
    procedure Edt_SysMenuCodeExit(Sender: TObject);
    procedure Treeview1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure cbx_fileClick(Sender: TObject);
    procedure tlbtn_exitClick(Sender: TObject);
  private
    { Private declarations }
    Lc_SysMenuId:integer;
    Lc_SysModuleCode:string;
    Lc_SysMenuCode:string;
    isfound:boolean;                    //在添加Treeview的节点时,是否找到相同或大于id的节点
    Lc_OldCode:string;                       //修改前的id
    treenode,node1:ttreenode;
    checkResult:boolean;

    procedure Addnode(fidstring:string;treenode1:ttreenode);  //添加节点,fidstring-父id,treenode1-父节点
    procedure ChangeID(Sourceid,tArgetid:string;isdelete:boolean); //改变id,Sourceid-源id,tArgetid-目标id,isdelete-是否因删除而改变id
    procedure CreateTreeview;      //生成菜单树
    procedure refreshedits;        //刷新edit和combobox
    procedure setedits(setmenuid,setmenuName,setOtherInfo:boolean); //设置edit为空和设置enabled属性,iSall-是否对全部设置,isenable-是否仅仅设置enabled属性而不清空
    procedure openqr_menu;        //打开qr_menu
    procedure delcurrec(sqlstring:string);  //删除当前记录
    procedure Changerecok(fidstring,Sourceid:string);//按确定后改变记录
    procedure Changerecdel(fidstring,Sourceid:string);//按删除后改变记录
    procedure set_Treeview_after_ok;     //按确定后设置Treeview
    procedure set_Treeview_after_Delete;  //按删除后设置Treeview
    procedure findnode(node:ttreenode);//查找节点
    procedure find_Addnode(node:ttreenode);//查找并添加节点
    procedure Changenode(node:ttreenode;Sourceid,tArgetid:string);//改变节点
    procedure AssignsqlpAra; //设置sql语句中的参数
    procedure check(sender:tobject);  //统一的有效性检查
    procedure seteditmaxlen; //设置各个edit的maxlength
    function  prefixofstr(s:string;chr:chAr;len:integer):string;
  public
    procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
    { Public declarations }
  end;

var
  Frm_Sys_SysMenu: TFrm_Sys_SysMenu;

implementation

uses Sys_SysMenu_SelectModule,Sys_Global;

{$R *.DFM}

procedure TFrm_Sys_SysMenu.FormCreate(Sender: TObject);
begin
  inherited;
  Lc_OldCode:='';
  Lc_SysModuleCode:='';
  Lc_SysMenuCode:='';
//  tbsht_PAra.free;
  Lc_SysMenuId:=0;
  Lbl_ModuleName.Caption:='';
end;

procedure TFrm_Sys_SysMenu.FormActivate(Sender: TObject);
var modalrslt:tmodalResult;
begin
  Application.Createform(TFrm_Sys_SysMenu_SelectModule,Frm_Sys_SysMenu_SelectModule);
  Frm_Sys_SysMenu_SelectModule.InitForm(AdoQry_Tmp1.Connection);
  InitCmbxText(Frm_Sys_SysMenu_SelectModule.cmbbx_SelectModule,lc_SysModuleCode);
  modalrslt:=Frm_Sys_SysMenu_SelectModule.Showmodal;
  if (modalrslt=mrok) or (Lc_SysModuleCode<>'') then
  begin
    if modalrslt=mrok then
    begin
      repaint;
      lbl_ModuleName.Caption:=Frm_Sys_SysMenu_SelectModule.SysModuleName;
      Lc_SysModuleCode:=Frm_Sys_SysMenu_SelectModule.SysModuleCode;
//      tbsht_general.Show;
      openqr_menu;
      if Edt_SysMenuName.maxlength=0 then
        seteditmaxlen;
      CreateTreeview;
      Treeview1.Items[0].Selected :=True;
      Treeview1.Items[0].Expand(False);
      Treeview1.setfocus;
      btn_ok.enabled:=False;
      btn_Cancel.enabled:=False;
      setedits(False,False,False);
      inherited;
    end;
  end
  else
  begin
    tlbtn_Add.enabled:=False;
    tlbtn_Delete.enabled:=False;
    btn_ok.enabled:=False;
    btn_Cancel.enabled:=False;
    setedits(False,False,False);
  end;
end;

procedure TFrm_Sys_SysMenu.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (activecontrol is tmemo) then
    exit;
  if (key=ord('N')) and (shift-[sSalt]-[ssshift]+[sSCtrl]=shift) then
  begin
    if tlbtn_Add.enabled then
      tlbtn_Addclick(sender);
    exit;
  end;
  if (key=ord('F')) and (shift+[sSCtrl]-[ssshift]-[sSalt]=shift) then
  begin
    tlbtn_Conditionclick(sender);
    exit;
  end;
  case key of
    vk_eScApe:
      if (btn_Cancel.enabled) or (panel1.visible) then
        btn_Cancelclick(sender)
      else
        tlbtn_exitclick(sender);
    vk_up,vk_Down:
    begin
      if (ActiveControl is TTreeview)or(sSalt in shift)or((ActiveControl is Tcombobox)and((ActiveControl as Tcombobox).droppeddown)) then
        exit;
      SelectNext(ActiveControl As Twincontrol,key=vk_Down,True);
      key:=0;
    end;
  end
//  inherited;
end;

procedure TFrm_Sys_SysMenu.FormKeyPress(Sender: TObject; var Key: ChAr);
begin
  inherited;
  if (activecontrol is tmemo) then
    exit;
  if (word(key)=vk_return)and not(activecontrol is tbutton) then
  begin
    selectnext(activecontrol as twincontrol,True,True);
    key:=#0;
  end;
end;

procedure TFrm_Sys_SysMenu.Treeview1Click(Sender: TObject);
var
  Currentid,s:string;//当前id
begin
  if Treeview1.selected=nil then
    exit;
  s:=Treeview1.Selected.Text;
  if s='Root' then
    setedits(False,False,False)       //全部edit清空并disable
  else
  begin
    setedits(False,True,True);        //全部edit都enable
    Currentid:=copy(s,1,pos(' ',s)-1);
    AdoQry_Tmp2.locate('SysMenuCode',Currentid,[]);
    refreshedits;
    btn_ok.Enabled:=False;
    btn_Cancel.enabled:=False;
    tlbtn_Add.Enabled:=True;
    tlbtn_Delete.Enabled:=True;
    Lc_OldCode:=Trim(Edt_SysMenuCode.Text);
  end;
  panel1.visible:=False;
  inherited;
end;

procedure TFrm_Sys_SysMenu.Treeview1Enter(Sender: TObject);
begin
  tlbtn_Add.Enabled:=True;
  tlbtn_Delete.Enabled:=True;
  Treeview1click(sender);
  inherited;
end;

procedure TFrm_Sys_SysMenu.Treeview1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Treeview1.Items.Count<>0 then
  begin
    case key of
    vk_up,vk_Down,vk_right,vk_left:
      Treeview1click(sender);
    vk_f11:
      tlbtn_expandclick(sender);
    vk_f12:
      tlbtn_CollApseclick(sender);
    end;
  end;
  inherited;
end;

procedure TFrm_Sys_SysMenu.edt_Cmbbx_Change(Sender: TObject);
begin
  if not (activecontrol is tTreeview) then
  begin
    btn_ok.Enabled :=True;
    btn_Cancel.enabled:=True;
  end;
  inherited;
end;

procedure TFrm_Sys_SysMenu.Edt_SysMenuCodeEnter(Sender: TObject);
begin
  if (Edt_SysMenuCode.Text='')and(Edt_SysMenuCode.Focused) then
  begin
    Edt_SysMenuCode.text:='mn01';
    Edt_SysMenuCode.SelectAll;
  end;
  inherited;
end;

procedure TFrm_Sys_SysMenu.btn_okClick(Sender: TObject);
var
  fidstring,Sourceid,s:string;//父id;源id
begin
  if not (activecontrol is tbutton) then
  begin
    btn_ok.setfocus;
    if not checkResult then
      exit;
  end;
  if not panel1.visible then
  begin
    with AdoQry_Tmp1 do
    begin
      Close;
      sql.clear;
      sql.Add('update SysMenu set ');
      sql.Add('        PSysMenuCode=:PSysMenuCode,');
      sql.Add('        SysMenuCode=:SysMenuCode,');
      sql.Add(        'SysMenuName=:SysMenuName, ');
      sql.Add(        'FormName=:FormName, ');
      sql.Add(        'pAra1=:pAra1, ');
      sql.Add(        'pAra2=:pAra2, ');
      sql.Add(        'pAra3=:pAra3, ');
      sql.Add(        'pAra4=:pAra4, ');
      sql.Add(        'pAra5=:pAra5, ');
      sql.Add(        'pAra6=:pAra6, ');
      sql.Add(        'pAra7=:pAra7, ');
      sql.Add(        'pAra8=:pAra8, ');
      sql.Add(        'pAra9=:pAra9, ');
      sql.Add(        'pAra10=:pAra10 ');
      sql.Add('  where SysModuleCode=:SysModuleCode ');
      sql.Add('    and SysMenuid=:SysMenuId');
      AssignsqlpAra;
      execsql;
    end;
    openqr_menu;
    Treeview1.Selected.text:=Trim(Edt_SysMenuCode.text)+' '+Trim(Edt_SysMenuName.Text);
    Treeview1.SetFocus;
    btn_ok.Enabled :=False;
    btn_Cancel.enabled:=False;
    tlbtn_Delete.Enabled :=True;
    s:=Treeview1.Selected.Text;
    if  s='Root' then setedits(False,False,False)
    else if copy(s,pos(' ',s)+1,1)='-' then setedits(False,True,True)
    else setedits(False,True,True);
  end
  else
  begin
    with AdoQry_Tmp2 do
    begin
      Sourceid:=Trim(Edt_SysMenuCode.Text);
      if length(Sourceid)=4 then fidstring:=''
      else fidstring:=copy(Sourceid,1,length(Sourceid)-2);
    end;
    Changerecok(fidstring,Sourceid);
    with AdoQry_Tmp1 do
    begin
      Close;
      sql.clear;
      sql.Add('insert into SysMenu '+
              '( SysModuleCode, '+
              '  PSysMenuCode, '+
              '  SysMenuCode, '+
              '  SysMenuName, '+
              '  FormName, '+
              '  PAra1, '+
              '  PAra2, '+
              '  PAra3, '+
              '  PAra4, '+
              '  PAra5, '+

⌨️ 快捷键说明

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