MDI窗体打开一个普通的登录窗体时出错,谢谢~~

epowerlab 2004-03-19 05:18:54
工程文件.

program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Main in 'Main.pas' {frmMain},
Sys_Gobal in 'Sys_Gobal.pas',
DateMoudle in 'DateMoudle.pas' {DM: TDataModule},
LoginForm in 'LoginForm.pas' {frmLogin};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.

Main.pas 为fsMDIForm

uses Sys_Gobal, DateMoudle, LoginForm;

//显示登录窗口
procedure TfrmMain.FormPaint(Sender: TObject);
begin

if frmLogin = nil then
frmLogin:=TfrmLogin.create(self);
frmLogin.ShowModal ;

end;


------------------------------------
LoginForm.pas 为fsNormal

procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// 关闭
Action := caFree;

end;

运行出错,错误提示如下:

Project Project1.exe raised exception class EInvalidOpertion with message 'Cannot make a visible window modal'. process stoppen. Use Step or Run to continue
...全文
80 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzx130 2004-05-07
  • 打赏
  • 举报
回复
学吸啊
epowerlab 2004-03-22
  • 打赏
  • 举报
回复
frmlogin:=nil 修改成这个可以了
可是与 Action := caFree; 有什么区别呢?

epowerlab 2004-03-22
  • 打赏
  • 举报
回复
to : cnsolonet(鹰)
按你说的可以打开的,但是在关闭frmLogin的时候出现
打开时正常,可是关闭frmLogin的时候出现如下问题
Project Project1.exe raised exception class EAccessViolation with 'Access violation at address 00000000.Read of address 00000000'. Process stopped. Use Step or Run to continue.

procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// 关闭
Action := caFree;

end;

谢谢各位了..


101monster 2004-03-19
  • 打赏
  • 举报
回复
呵呵,UP!
cnsolonet 2004-03-19
  • 打赏
  • 举报
回复
//显示登录窗口
procedure TfrmMain.FormPaint(Sender: TObject);
begin

if frmLogin = nil then
frmLogin:=TfrmLogin.create(self);
frmLogin.ShowModal ;-------------------改为 frmlogin.show;

end;
gaozhu2003 2004-03-19
  • 打赏
  • 举报
回复
關閉窗體時應frmlogin:=nil
dyf2001 2004-03-19
  • 打赏
  • 举报
回复
窗体的Visible的属性默认为False,如果你该为True以后就不能showModal了。

另外你的登陆窗体应该在项目文件中用而不是主窗体中。

frmLogin:=TfrmLogin.create(self);
try
if frmLogin.ShowModal = mrOk then
....
else
...
finally
frmLogin.free;
end;
hunterht 2004-03-19
  • 打赏
  • 举报
回复
//frmLogin窗体的visible属性改为False


if (frmLogin.ShowModal = mrOK) then
frmMain.Show
else
Application.Terminate;


//在frmLogin的确定按钮中,如果用户名和密码正确,则
Self.ModalResult := mrOK;

menggirl 2004-03-19
  • 打赏
  • 举报
回复
MDI打开是不可以用SHOWMODAOL的,要用SHOW

关闭是
在ONCLOSE
里写:
ACTION:=FREE:
epowerlab 2004-03-19
  • 打赏
  • 举报
回复
简单地就是show出来的frmLogin窗体,当我填完账号密码后确认正确的就关闭这个窗体
并且使主窗体得到焦点。。。
Dlwxn 2004-03-19
  • 打赏
  • 举报
回复
没有看明白。
epowerlab 2004-03-19
  • 打赏
  • 举报
回复
to : Dlwxn(Dlwxn)
你的方法还真管用的

再问个,我要把frmLogin里的button点击后经过判断,先关闭这个frmLogin然后frmMain得到焦点~~
epowerlab 2004-03-19
  • 打赏
  • 举报
回复
把frmLogin.ShowModal换成Show后

打开时正常,可是关闭frmLogin的时候出现如下问题
Project Project1.exe raised exception class EAccessViolation with 'Access violation at address 00000000.Read of address 00000000'. Process stopped. Use Step or Run to continue.
Dlwxn 2004-03-19
  • 打赏
  • 举报
回复
frmLogin窗体的visible属性改为False

5,387

社区成员

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

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