在线等待:登录窗口->主窗口->子窗口的问题(300分)

  • 主题发起人 主题发起人 huajianguo
  • 开始时间 开始时间
H

huajianguo

Unregistered / Unconfirmed
GUEST, unregistred user!
程序要求:程序启动时出现一个登录窗口,登录窗口有两个按钮一个确定一个取消
按取消后退出整个程序。用户输入用户名和密码
按确定后从数据库提取数据检验是否正确,若不正确则提示。若正确则关闭
登录窗口,出现主窗口,并根据登录用户的不同分配相应的权限即某些菜单的enabled=false。
现在的问题是点主窗口的菜单出现问题子窗口不能出现,提示没有父窗口。
我查过以前的贴子如:
一、
在Mainform的Onactivate事件中寫:
procedure TMainForm1.FormActivate(Sender: TObject);
begin
try
Longinform.showmodal;
if longinform.ModalResult<>mrok then
application.Terminate;
finally
Longinform.free;
Longinform:=nil;
end;
end;
我的问题是编译时出现:mrok 没有定义。。。。。。
。。。。。
以及其它一些解决办法,也出现一些问题。。。。
拜托。。。。老板逼急了。。。分不够再加。。。

 
uses Controls;
 
改if longinform.ModalResult<>mrok then
application.Terminate;
为:if longinform.ModalResult<>1 then
application.Terminate;
看别人说的。没有试过。(这样可以少uses一个单元)

 
我看过以前贴子的做法大概是:
主窗口为系统自动创建,
登录窗口为fsNormal系统不自动创建。
通过修改在工程文件的:
begin
Application.Initialize;
Application.CreateForm(Tmainf, mainf);
application.Run;
end.
段来使登录窗口先出现;

如:
begin
Application.Initialize;
with TForm2.Create(Application) do //这个是你的登录窗口,检查密码时否正确
if ShowModal = mrOK then //如果密码正确
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
我就不懂mrOK是什么东东。。。
还有就是登录窗口怎么向主窗口传送是谁登录(涉及分配相应权限。。。)。。。。

 
把mrOK换成IDOK
 
to::rainxy2002
和mrOK一样的结果:(
 
huajianguo:
在Project Source中:
1、mrOK和idOK至少有一个是定义在windows中,所以,
uses windows应该就可以了。
2、定义全局变量UserID,在LoginForm中检查用户
权限,对userid赋值,在TMainForm的OnCreate中,
根据UserID(或者User权限)设置菜单项。
uses
windows,
...;

var
UserID:Integer;

...
with TLoginForm.Create(Application) do
try
if ShowModal = mrOK then
Application.CreateForm(TMainForm,MainForm);
else
Application.Terminate;
finally
Free;
end;
...





 
mrOK是模式窗体的返回值,
具体可以查DEPHI帮助了,
编译时出现:mrok 没有定义。。。。。。
应该在
uses 里加入
Forms;

登录窗口怎么向主窗口传送是谁登录(涉及分配相应权限。。。)。。。问题,
可以通过定义公用变量或用一个临时的数据集通过字段来传递了,
 
第一个创建的窗体始终是主窗体
在工程文件里首先将主窗本隐藏,在登录窗体的关闭时将主窗体再显示出来
在工程文件里的application.run前面加上一句
application.showmainform:=false;
在登录窗体的关闭后加上application.showmainform:=true;
 
[:D]只需在工程文件中手工添加APPLICATION.ShowMainForm:=False;然后在登陆窗口的ONCREATE事件中调用SHOW;
注意登陆窗口必须自动创建,然后调用DATAMODULE中的ADOQUERY来判断用户名密码,及取得相关权限,然后再调用主窗口的Show方法;这样就OK了。
好了讲的已经较透了,口水都干了,快把分数拿来吧:)
 
看看你的窗体属性
以下代码(在工程文件DPR里)是我的软件里面用的,没有任何问题,
看过以后给分
LoginFrm := TLoginFrm.Create(Application);
LoginFrm.ShowModal;
if LoginFrm.ModalResult <> 2 then
begin
datesetfrm := TDatesetFrm.create(APPlication);
DateSetFrm.ShowModal;
if DatesetFrm.ModalResult <> 2 then
begin
Application.CreateForm(TMainFrm, MainFrm);
Application.Run;
end;
end;
 
基本同上:在 dpr 文件里写如下代码

Application.Initialize;
if Longinform.ShowModal = 1 then
begin
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end;
 
多人接受答案了。
 
后退
顶部