前段时间开始学习Delphi数据库编程,在程序设计中需要加入【权限控制】的功能,上网找了一些资料,大家实现这个功能的方法有很多,不过网上提供的资料基本上都很混乱,估计是一次又一次的转载的时候丢失了很多信息。
我们只需利用Delphi提供的TActionList控件就可以很容易的实现权限控制功能。通过TActionList,应用程序可以统一管理其 TAction,这里的Action,可以理解为应用程序的功能。在应用的设计期间,可以通过TActionList编辑器将功能(Action)加入 TActionList,将Action加入TActionList后,就可能通过Object Inspector设置Action的属性或为其建立事件句柄。当要限定某一功能时,可能利用TAction的Enabled,将其设为False,此功 能对于用户将被屏蔽掉,如果要此功能对用户不可见,则可以设定Visible为False。
具体实现办法:
第一步:建立用户信息表,储存用户信息。
用户信息表User的结构如下:
字段名称 |
字段类型 |
说明 |
UsrID |
string |
用户的ID,为表的关键字 |
UsrName |
string |
用户名称(姓名) |
UsrPwd |
string |
用户密码 |
UsrRight |
string |
用户权限(也可以设置成Interger) |
第二步:在程序主界面单元里面定义全局变量OperatorName、OperatorRight和全局过程ChkRight,在登录单元内获取权限字符串后赋值给OpertorRight。
frmLogin单元:
OperatorRight := ADOQuery1.FieldByName('UsrRight').AsString; |
frmMain单元:
var frmMain: TfrmMain; OperatorName, OperatorRight: string; //用户名、权限 procedure ChkRight(strRight: string); //权限检查 implementation
uses uLogin;
{$R *.dfm}
//============================================================================== // 检查用户权限 //==============================================================================
procedure ChkRight(strRight: string); var i, num: Integer; blRight: Boolean; begin with frmMain do begin // string[i]没有 0 ,所以循环从 1 开始 for i := 1 to Length(strRight) do begin //设置Actions是否显示,以此来控制用户权限 blRight := strRight[i] = '1'; TAction(actlstMain.Actions[i-1]).Visible := blRight; end; end; end;
procedure TfrmMain.FormActivate(Sender: TObject); begin ChkRight(OperatorRight); //检查用户权限 end;
|
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2017-11-22 登录窗口不是系统主窗口 但又需要最先显示 用delphi怎么编写代