请问系统登陆界面和主界面之间,牵扯权限和可操作菜单设置是怎么处理的?(50分)

A

alcor

Unregistered / Unconfirmed
GUEST, unregistred user!
目前是想首先显示登陆界面,然后验证用户名和密码,然后进入主界面
根据用户名获得可操作的菜单项,
那么请问初始化可操作菜单应该放在什么位置?
现在是作为主界面的一个事件,在登陆界面触发,根本不行,
还有就是它和主界面的初始化顺序是怎样比较合适?
 
我是这么做的
主窗体的oncreate事件中
建立闪现窗体,连接数据库
建立登录窗体,
这样才可以释放闪现窗体和登录窗体(DELPHI把第一个建立的窗体作为主窗体)

然后根据用户级别从数据库中读取权限,设置不可使用的Action为不能用
我把Action的名字保存在数据库中,根据权限禁止相应的Action
 
我是自定义类,如TUser,在TUser的属性被改变的时候调用改变的具体实现函数。
 
ysai你说的闪现窗体是什么意思?
 
有没有人有其他解决方案?
 
登录界面使用Modal窗。
主程序中象这样:

CreateFrame(..主界面)
主界面.Show
form:=TLoginFrm.Create(nil);
form.ShowModal;
如果登录成功
刷新主界面权限状态;
application.run;
否则 exit;

在登录界面中从数据库调入操作员的权限保存到一个全局的数据集中。
自定义一个Button控件,增加权限属性(String)对应数据库权限编号。
覆盖其SetEnabled方法,判断权限属性和权限数据集记录,匹配就设置为 true,否则设置
为 false,自然实现界面中各个功能的控制。

主界面通过Action控制各个按钮和菜单。
使用Action的HelpKeyword作为权限属性和数据集匹配。
 
我想我的和ysai一样,不过我觉得不需要闪现窗体,只要在主窗体的oncreate事件中连接数据库
然后建立登陆窗体,然后根据登陆用户权限设置其可操作菜单,然后释放登陆窗体
 
闪现窗体就是SplashForm
像Delphi启动时的窗体
我是在闪现窗体中连接数据库,如果数据库连接错误就不会出现Login窗体
我的用户信息是放在数据库中的
 
同意ysai的說法

界面的設置信息可以保存到注冊表
敏感信息保存到數據庫里

1.show SplashForm
2.read registry
3.login database
4.if Error then Application.Terminate
5.show loginform
6.setup
7.show mainform
8.free SplashForm and loginform
 
类似于这样,不好意思,用JS写的
xGenForm.CreateForm("LogForm","login.dfm", "login.js");
xGenForm.ShowModal("LogForm");
xGenForm.DestroyForm("LogForm");
if (xScript.ShareVar("isok")==1)
{
//For Gobal DataModaul.
xGenForm.CreateForm("DMForm","DM.dfm", "DM.js");
xGenForm.Show("DMForm");

xGenForm.CreateForm("Mainfrm","newMainfrm.dfm", "Mainfrm.js");
xGenForm.Show("Mainfrm");
}else{xScript.QuitApplication();}
 
ning_ning
请问如何获取登陆成功的信息?
 
Loginform返回的密碼和數據庫中的信息一致時即為登錄成功呵!

procedure TMainForm.FormCreate(Sender: TObject);
begin
InitFromReg; //自定義過程,從注冊表中讀取信息
Autologinform:=TAutologinform.create(self);
Autologinform.show;
Application.ProcessMessages;
Autologinform.Update;//全窗體的控件能顯示

LoginDatabase; //自定義過程,登錄數據庫

{order為一個定義在全局單元的全局變量,在InitFromReg過程中填充它
    下面這句進行解密。}
order:=EncryptEx(order,false);
with TLoginForm.create(Application) do
begin
{return為TLoginForm的全局變量,初始為false.
當loginform按下登錄時,比較edit.text是否與order
一致,如果一致則置其為true,然后loginform返回﹜          
Return:=false;
showmodal;
if not Return then Application.Terminate;
Application.ProcessMessages;
{如果LoginForm.return沒有返回true則為登錄失敗}
end;

If Assigned(Autologinform) then
Autologinform.free;

Setmaincontrols; ////自定義過程,設置主窗體控件狀態
end;

這個例子中是把密碼加密保存到注冊表中,而你可以保存到數據庫中
 
谢谢各位的支持
 
多人接受答案了。
 
顶部