有时候我们需要进行批量设置某一组菜单或按纽,这里候就需要菜单数组。
这儿以设置菜单为例。
unit ulogin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxLookAndFeelPainters, cxCheckBox, cxDropDownEdit, cxCalendar,
cxTextEdit, cxMaskEdit, cxControls, cxContainer, cxEdit, cxLabel,
StdCtrls, cxButtons, ExtCtrls, ADODB, DB,inifiles,registry,StrUtils, Menus;
type
Tfrmlogin = class(TForm)
Panel1: TPanel;
Bevel1: TBevel;
Bevel2: TBevel;
type tagLIMITS = record
nNew: integer;
nModify: integer;
nDel: integer;
nSh: integer;
nJz: integer;
nPrint: integer;
end;
var
SM:array[1..36] of TMenuItem; //定义菜单数组
qx:array[1..36] of tagLIMITS; //全局结构体变量,存放权限
var
frmlogin: Tfrmlogin;
procedure GetLimits(FunId:string;var outlimits:tagLIMITS);stdcall external 'LimitMng.dll'; //调用外部DLL
procedure SetLoginUser(UserId:string);stdcall external 'LimitMng.dll';
implementation
uses ujserp, udmjserp, uJdt,md5, uDataInit;
{$R *.dfm}
//function MD5String(M: string): MD5Digest;stdcall;External'md5.dll' name 'MD5String';
//function MD5Print(D: MD5Digest): string;stdcall;external'md5.dll' name 'MD5Print';
procedure Tfrmlogin.cxButton1Click(Sender: TObject);
var s,Temp: string;
i: Integer;
begin
if cxYfmc.Text = '' then
begin
MessageBox(self.Handle,'没有用户名!','系统提示',MB_ICONINFORMATION);
Exit;
end;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * From UserLogin Where User_Name = '+QuotedStr(cxYfmc.Text));
Open;
end;
if MD5Print(MD5String(cxDlmm.Text)) = ADOQuery1.fieldbyname('User_Password').AsString then
begin
FrmJdt :=TFrmJdt.Create(Self); //创建登录进度条
FrmJdt.Show;
FrmJdt.lblCaption.Caption :='正在初始化系统,请稍候......';
FrmJdt.Update;
FrmJdt.cxBar.Position :=2;
FrmJdt.Update;
frmjserp.statSystemBar.Panels.Items[3].Text:=cxYfmc.Text;
FrmJdt.cxBar.Position :=5;
FrmJdt.Update;
ShowBackPicture(Sender); //显示主界面的背景
FrmJdt.cxBar.Position :=10;
FrmJdt.Update;
cxDlmm.Clear;
SetLoginUser(ADOQuery1.fieldbyname('User_Id').AsString); //设置用户ID
for i:=low(SM) to high(SM) do
begin
s:='fun00000';
if i<10 then Temp:='0'+ IntToStr(i)
else Temp:=IntToStr(i);
S:=S+Temp;
GetLimits(s,qx[i]);
if (qx[i].nNew = 1) or (qx[i].nModify = 1) or (qx[i].nDel = 1) or
(qx[i].nSh = 1) or(qx[i].nJz = 1) or (qx[i].nPrint = 1) then
SM[i].Enabled:=True
else
SM[i].Enabled:=False; //使用控件数组设置菜单的ENABLED 属性
// MessageBox(self.Handle,PChar(Temp),'销售管理系统',MB_ICONINFORMATION);
FrmJdt.cxBar.Position :=20+i*2;
end;
FrmJdt.cxBar.Position :=100;
SaveIni;
Close;
end
else
begin
MessageBox(self.Handle,'密码错误!','系统提示',MB_ICONINFORMATION);
cxDlmm.Clear;
cxDlmm.SetFocus;
end;
end;
procedure Tfrmlogin.FormCreate(Sender: TObject);
begin
EnableMenuItem(GetSystemMenu(Self.Handle,False),SC_CLOSE,MF_GRAYED);
ADOQuery1.Connection := dmjserp.con1;
cxDlsj.Date:= Date;
//窗体创建时,把菜单读入定义的数组中
SM[1]:=frmjserp.fun0000001;
SM[2]:=frmjserp.fun0000002;
SM[3]:=frmjserp.fun0000003;
SM[4]:=frmjserp.fun0000004;
SM[5]:=frmjserp.fun0000005;
SM[6]:=frmjserp.fun0000006;
SM[7]:=frmjserp.fun0000007;
SM[8]:=frmjserp.fun0000008;
SM[9]:=frmjserp.fun0000009;
SM[10]:=frmjserp.fun0000010;
SM[11]:=frmjserp.fun0000011;
SM[12]:=frmjserp.fun0000012;
SM[13]:=frmjserp.fun0000013;
SM[14]:=frmjserp.fun0000014;
SM[15]:=frmjserp.fun0000015;
SM[16]:=frmjserp.fun0000016;
SM[17]:=frmjserp.fun0000017;
SM[18]:=frmjserp.fun0000018;
SM[19]:=frmjserp.fun0000019;
SM[20]:=frmjserp.fun0000020;
SM[21]:=frmjserp.fun0000021;
SM[22]:=frmjserp.fun0000022;
SM[23]:=frmjserp.fun0000023;
SM[24]:=frmjserp.fun0000024;
SM[25]:=frmjserp.fun0000025;
SM[26]:=frmjserp.fun0000026;
SM[27]:=frmjserp.fun0000027;
SM[28]:=frmjserp.fun0000028;
SM[29]:=frmjserp.fun0000029;
SM[30]:=frmjserp.fun0000030;
SM[31]:=frmjserp.fun0000031;
SM[32]:=frmjserp.fun0000032;
SM[33]:=frmjserp.fun0000033;
SM[34]:=frmjserp.fun0000034;
SM[35]:=frmjserp.fun0000035;
SM[36]:=frmjserp.fun0000036;
end;
end.