MDI主窗体前加 登录窗口 的问题,急。。。。。。

aiunong 2004-01-12 05:15:07
我写好了一个MDI程序,现需要在MDI显示前出现登录窗口
以便判断登录名及密码,和用户权限,
请问如何解决!
多谢了。。。。。。
...全文
167 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
nxfbccu 2004-01-13
  • 打赏
  • 举报
回复
将Login窗体的Visible设为false即可
aiunong 2004-01-13
  • 打赏
  • 举报
回复
up
aiunong 2004-01-13
  • 打赏
  • 举报
回复
没有啊,我把原来的所有代码全部去掉了,
可是还是出现上边的错误啊
nhdj 2004-01-13
  • 打赏
  • 举报
回复
提示error : cann't make a visible widows modal
你肯定在这之前设置了窗体的show,单步调试一下看看
nhdj 2004-01-13
  • 打赏
  • 举报
回复

3. Main单元的OnCreate如下:
begin
Form_login:= TForm_login.Create(Application); //创建登陆窗口
form_login.showmodal; //密码正确错误全在登陆窗口中判断,关闭程序也在登陆窗口中完成,main窗体只负责调用登陆窗口,并显示自身
end;


aiunong 2004-01-13
  • 打赏
  • 举报
回复
按楼上的步骤做了,
还是提示error : cann't make a visible widows modal
sanjianxia 2004-01-13
  • 打赏
  • 举报
回复
1. 判断过程不在项目单元里写,在Form_login里写
2. 项目单元如下:
begin
Application.Initialize;
Application.ShowMainForm:=false; //程序不显示主窗口
Application.CreateForm(TForm_main, Form_main);
Application.CreateForm(TForm_money, Form_money);
//注意,Form_money的visible必须为false
Application.Run;
end.
3. Main单元的OnCreate如下:
begin
Form_login:= TForm_login.Create(Application); //创建登陆窗口
if Form_login.ShowModal=mrOK then self.show //登陆的密码正确,则显示自己
else Application.Terminate; //否则,程序结束
end;
4. login单元的Button的onClick如下:
begin
if 密码正确 then ModalResult:=mrOK //密码正确,关闭自己,返回值mrOK
else //除了ModalResult:=mrOK以外,随你写了
end;

被ShowModal的窗体,只要有ModalResult:=[mrOK,mrCancel,mrAbort,..]等,就会自动关闭,并返回相应的值。
nhdj 2004-01-13
  • 打赏
  • 举报
回复
if startExe('进销存管理系统') then 是干什么用的?
aiunong 2004-01-13
  • 打赏
  • 举报
回复
to : aiq(aiq)

我在MDI主窗体中加入如下代码:
procedure TMainFm.FormPaint(Sender: TObject);
begin
LoginFm :=TLoginFm.create(mainfm);
if dm.Login_UserName<>'' then begin
loginfm.Show;
end else begin
dm.Login_UserName:='';
loginfm.Close ;
end;
end;
可是主窗体显示出来了同时显示了登录窗口,我想得到如下登录顺序:先显示登录窗口再显示
MDI主窗口。
上边的代码如果我把loginfm.showmodal便报错:cann't make a visible windows modal;
loginfm不是自动创建,在project->option-》loginfm不自动创建

登录窗口的确定按钮代码如下:
procedure TLoginFm.BtnOkClick(Sender: TObject);
var sPower:string;
begin
sPower :=Login(EtLoginid.Text,EtPW.Text);
if sPower='' THEN begin
msg('密码错误!','错误',2,0);
exit;
end else if sPower='0' then begin //一般操作 员
mainfm.N1.Visible :=false;
loginfm.close;
end else if sPower='1' then begin //管理员权限
loginfm.close;
end;
dm.Login_UserName:=EtLoginID.Text ;

end;

你能给我一个小例子吗
非常感谢。
shodog 2004-01-13
  • 打赏
  • 举报
回复
按你的办法做了,program 里代码如下:

begin
if startExe('进销存管理系统') then begin
Application.Initialize;
Application.Title :='进销存管理系统';
Application.CreateForm(TDm, Dm);
Application.CreateForm(TMainFm, MainFm); //将这句去掉就可以了
LoginFm :=TLoginFm.create(nil);
loginfm.Showmodal;

Application.CreateForm(TMainFm, MainFm);
//dm.ShopCon.Connected := True;
Application.Run;
end;

可是提示”cann't not make a visible widows modal“

如果我改loginfm.show;
则loginfm不显未而只接进入到MDI主窗体啊。
请问怎么回事啊
超人汪 2004-01-13
  • 打赏
  • 举报
回复
请问你在输入用户、密码那个窗体的时候按ALT+F4会出现什么状况?
nhdj 2004-01-13
  • 打赏
  • 举报
回复
在program里,格式如下:

Application.Initialize;
form2 := tform2.create(application);
form2.showmodal;

Application.CreateForm(TForm1, Form1);
Application.Run;

form2是登陆窗口,设置为不要自动创建,form1是主窗口
S海鸥 2004-01-13
  • 打赏
  • 举报
回复
study
aiq 2004-01-13
  • 打赏
  • 举报
回复
MDI自动,登陆创建,在MDI的onpaint里创建,
设置一个全局变量(用户名)如gs_username;
在显示登陆的时候判断
if gs_username<>'' then
.....登陆显示


在登陆成功后设置gs_username=你的用户名
//
gs_username你可以在数据模块中定义啊
登录成功后你可以将gs_username设置你进入的用户名,然后关闭登录窗口
你在程序中还可以使用“注销”功能,这时将gs_username='',登录窗口又会出现了

gs_username前加上数据模块的名称,如 数据模块名称.gs_username
清楚了吗,你先做,在说
Ascn 2004-01-12
  • 打赏
  • 举报
回复
同意楼上两位给的回复
aiunong 2004-01-12
  • 打赏
  • 举报
回复
to: yantao14(yt)
1.我要在登录窗口的确定BUTTON时判断用户名和密码,如果正确则赋给GS_USERNAME
可是其它的呢,我还是不太明白.....

希望你能我个例子。非常感谢!

yantao14 2004-01-12
  • 打赏
  • 举报
回复
gs_username全局变量可以定义在你的mdi窗体中,你的登陸窗口不要讓系統自動創建,
(在project-->options-->antuo create forms中不出現即可),然後在
祝窗口的onshow事件中創建登陸窗口,並判斷用戶名和密碼,如果正確把輸入的用戶名賦值給
祝窗口中的變量,然後根據權限創建菜單
aiunong 2004-01-12
  • 打赏
  • 举报
回复
to : ihihonline(小小→聆听那颗陨落的流星(031220)

按你的办法做了,program 里代码如下:

begin
if startExe('进销存管理系统') then begin
Application.Initialize;
Application.Title :='进销存管理系统';
Application.CreateForm(TDm, Dm);
Application.CreateForm(TMainFm, MainFm);
LoginFm :=TLoginFm.create(nil);
loginfm.Showmodal;

Application.CreateForm(TMainFm, MainFm);
//dm.ShopCon.Connected := True;
Application.Run;
end;

可是提示”cann't not make a visible widows modal“

如果我改loginfm.show;
则loginfm不显未而只接进入到MDI主窗体啊。
请问怎么回事啊
aiunong 2004-01-12
  • 打赏
  • 举报
回复
先谢楼上的,可是我有点不明白,
1.gs_username全局变量定义在哪个窗体内?何时给它赋值。
2.能实现先出现登录窗体,登录后再出现主窗体的效果吗?

不好意思,如果你能给出个小例子就更好了
在此先谢过了

ihihonline 2004-01-12
  • 打赏
  • 举报
回复
program RecordManage;

uses
Forms,
SysUtils,
。。。。。。

var
vIndex : Integer;

{$R *.res}

begin
Application.Initialize;
Application.Title := '档案管理系统';
FlashFrm := TFlashFrm.Create(Nil);
FlashFrm.Show;
FlashFrm.Update;
DataModuleFrm := TDataModuleFrm.Create(Nil);
FlashFrm.Update;
for vIndex := 1 to 10 do
begin
Sleep(200); //1000 = 1S
FlashFrm.Update;
end;
LoginFrm := TLoginFrm.Create(Nil);
FlashFrm.Update;
FlashFrm.Free;
LoginFrm.ShowModal;
{ loginFrm里边写事件就可以了。
还有,这个loginFrm要设置为普通的窗体,不要设置为MDI子窗体。}
Application.CreateForm(TMainFrm, MainFrm);
加载更多回复(4)

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧