📄 sys_sysmenu.pas
字号:
//张程炜、李靖
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 + -