我将菜单各项 的TAG 值设置成不同级别。Mainform Active时, 循环判断一下, 用户权限小于这个级别此菜单就可以使用if LoginUser.UserLevel <= (Mainform.components[Loop] As TmenuItem).Tag then (Mainform.Components[Loop] As TMenuItem).Enable := true else (Mainform.Components[Loop] As TMenuItem).Enable := false;
看看吧. procedure TF_Pass.BtnOKClick(Sender: TObject); begin Mypass:=''; USERPOWER:=False; SPOWER1:='YYYY';SPOWER2:='YYYY';SPOWER3:='YYYY';SPOWER4:='YYYY'; SPOWER5:='YYYY';SPOWER6:='YYYY';SPOWER7:='YYYY';SPOWER8:='YYYY'; SPOWER9:='YYYY';SPOWER10:='YYYY'; Mypass:=Trim(indexstr); with DataM do begin case (Sender as TButton).Tag of 1:begin QY_Pass.Close; QY_Pass.SQL.Clear; QY_Pass.SQL.Add('Select * From POWER'); QY_Pass.Open; begin if not QY_Pass.Locate('UserNo',Edit1.Text,[]) then begin MessageDlg('無效的用戶代號,請重新輸入', mtInformation,[mbCancel], 0); Edit1.SetFocus; Abort; end else begin if not QY_Pass.Locate('UserNo;Power', VarArrayOf([Edit1.Text, Edit2.Text]), []) then begin MessageDlg('無效的用戶密碼,重新輸入密碼', mtInformation,[mbCancel], 0); Edit2.SetFocus; Abort; end end; SPower1:=QY_Pass.fieldbyName('POWER1').AsString; SPower2:=QY_Pass.fieldbyName('POWER2').AsString; SPower3:=QY_Pass.fieldbyName('POWER3').AsString; SPower4:=QY_Pass.fieldbyName('POWER4').AsString; SPower5:=QY_Pass.fieldbyName('POWER5').AsString; SPower6:=QY_Pass.fieldbyName('POWER6').AsString; SPower7:=QY_Pass.fieldbyName('POWER7').AsString; SPower8:=QY_Pass.fieldbyName('POWER8').AsString; SPower9:=QY_Pass.fieldbyName('POWER9').AsString; SPower10:=QY_Pass.fieldbyName('POWER10').AsString; if QY_Pass.FieldByName('SUPUSER').AsBoolean=True then USERPOWER:=True; Close; if USERPOWER=True then begin F_Main.Clear.Enabled:=True; F_Main.Manager.Enabled:=True; end else begin F_Main.Clear.Enabled:=False; F_Main.Manager.Enabled:=False; end; // F_Main.StatusBar1.Panels[5].Text:=UpperCase(MyPass); Close; end; end;
Enabled True = 正常显示 False = 灰色、不可用
Visible True = 显示 False = 隐藏
对于你提出的问题,使用Enabled即可。
用户权限小于这个级别此菜单就可以使用if LoginUser.UserLevel <= (Mainform.components[Loop] As TmenuItem).Tag then
(Mainform.Components[Loop] As TMenuItem).Enable := true
else
(Mainform.Components[Loop] As TMenuItem).Enable := false;
procedure TF_Pass.BtnOKClick(Sender: TObject);
begin
Mypass:='';
USERPOWER:=False;
SPOWER1:='YYYY';SPOWER2:='YYYY';SPOWER3:='YYYY';SPOWER4:='YYYY';
SPOWER5:='YYYY';SPOWER6:='YYYY';SPOWER7:='YYYY';SPOWER8:='YYYY';
SPOWER9:='YYYY';SPOWER10:='YYYY';
Mypass:=Trim(indexstr);
with DataM do
begin
case (Sender as TButton).Tag of
1:begin
QY_Pass.Close;
QY_Pass.SQL.Clear;
QY_Pass.SQL.Add('Select * From POWER');
QY_Pass.Open;
begin
if not QY_Pass.Locate('UserNo',Edit1.Text,[]) then
begin
MessageDlg('無效的用戶代號,請重新輸入', mtInformation,[mbCancel], 0);
Edit1.SetFocus;
Abort;
end
else
begin
if not QY_Pass.Locate('UserNo;Power', VarArrayOf([Edit1.Text, Edit2.Text]), []) then
begin
MessageDlg('無效的用戶密碼,重新輸入密碼', mtInformation,[mbCancel], 0);
Edit2.SetFocus;
Abort;
end
end;
SPower1:=QY_Pass.fieldbyName('POWER1').AsString;
SPower2:=QY_Pass.fieldbyName('POWER2').AsString;
SPower3:=QY_Pass.fieldbyName('POWER3').AsString;
SPower4:=QY_Pass.fieldbyName('POWER4').AsString;
SPower5:=QY_Pass.fieldbyName('POWER5').AsString;
SPower6:=QY_Pass.fieldbyName('POWER6').AsString;
SPower7:=QY_Pass.fieldbyName('POWER7').AsString;
SPower8:=QY_Pass.fieldbyName('POWER8').AsString;
SPower9:=QY_Pass.fieldbyName('POWER9').AsString;
SPower10:=QY_Pass.fieldbyName('POWER10').AsString;
if QY_Pass.FieldByName('SUPUSER').AsBoolean=True then
USERPOWER:=True;
Close;
if USERPOWER=True then
begin
F_Main.Clear.Enabled:=True;
F_Main.Manager.Enabled:=True;
end
else
begin
F_Main.Clear.Enabled:=False;
F_Main.Manager.Enabled:=False;
end;
// F_Main.StatusBar1.Panels[5].Text:=UpperCase(MyPass);
Close;
end;
end;