原帐为:
begin //project
Application.Initialize;
start_kf:=tstart_kf.Create(application);
start_kf.Show;
start_kf.Update;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TYD_KF, YD_KF);
start_kf.Hide;
start_kf.Free; //启动画面 Application.CreateForm(Tlogin_kf, login_kf);
login_kf.Update;
login_kf.ShowModal; //登录
Application.Run;
end.---------------------------------------------
//登录“确定”处
...
if 条件 then
begin
login_kf.Hide;
login_kf.Free;
Application.Run;
end else
begin
application.Terminate;end;
........-------------------------------------------
运行程序时开始很正常,但退出时( application.Terminate;)就显示application error错。 谢谢各位的指教!
begin //project
Application.Initialize;
start_kf:=tstart_kf.Create(application);
start_kf.Show;
start_kf.Update;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TYD_KF, YD_KF);
start_kf.Hide;
start_kf.Free; //启动画面 Application.CreateForm(Tlogin_kf, login_kf);
login_kf.Update;
login_kf.ShowModal; //登录
Application.Run;
end.---------------------------------------------
//登录“确定”处
...
if 条件 then
begin
login_kf.Hide;
login_kf.Free;
Application.Run;
end else
begin
application.Terminate;end;
........-------------------------------------------
运行程序时开始很正常,但退出时( application.Terminate;)就显示application error错。 谢谢各位的指教!
解决方案 »
- 发短信程序
- 用SOCKET API 同时接收多个客户机传来的文件时,怎么把每个客户机传来的文件分开接收!
- 请问一个"Record not found or changed by another user"错误的问题!高分
- grid双击表头中间分隔线可以自动适应列宽,如何做到不双击?
- 如何在DBGrid中对浮点数格式化显示?
- ****请教高手关于网络和RS232的问题,拜托!!!****
- delphi中调用API时怎么知道应用传递什么参数?有没有VB 中的API浏览器那样的工具?
- 烦死我了!程序保存后却不能运行了!一定给分!
- 为什么Delphi6企业版还要其它的lisence key?我都晕了!!
- 能否禁止某些程序调用某些API????
- 怎样取出所选的dbgrid中的一个记录的字段。。。。。
- 请问在delphi6中用那个控件播放swf文件
begin
login_kf.Hide;
login_kf.Free;
Application.Run;
end else
begin
//先把你的这个对话框所占的资源释放掉再退出看看:
login_kf.free;
login_kf := nil;
application.Terminate;end;
begin
login_kf.Hide;
login_kf.Free;
Application.Run; // Run在If里
end else //
begin
application.Terminate; //没有Run就Terminateend;
begin
login_kf.Hide;
login_kf.Free;
Application.Run;
end else
begin
application.Terminate;end;
代码改成如下:
if 条件 then
begin
close;
end else
begin
application.Terminate;end;
begin
login_kf.Hide;
login_kf.Free;
Application.Run;
end else //
begin
login_kf.Free;
halt;
end;
问题是:登录 “取消”时没有错,但进入主程序后退出就出错。我感觉是
if 条件 then
begin
login_kf.Hide;
login_kf.Free;
Application.Run;
end
中有问题,而project 中已经application.run了。
begin
login_kf.Hide;
login_kf.Free;
Application.Run; //错错错错错错错错错错错吗?
end
把你的这个对话框所占的资源释放掉再退出看看:这样应该就可以了吧?
一、本人上面已经提供的(只是在project中加上login_kf.free释放该单元)
二、
if 条件 then
begin
login_kf.Hide;
//login_kf.Free;//此处不应该释放该单元,因为application正在调用
Application.Run;
end
三、最不安全的做法:在退出程序时不要调用close或application.Terminate而使用halt直接退出。
说明:delphi的帮助文件指出,不要手工调用application.run方法(Do not call Run. When creating a new project, The IDE automatically creates a main program block in the project file that calls the Run method. When the application is executed, the application Run method is called)。其实application.run()会自动建立一个退出过程,以保证所有的组件都会释放,ahliuj程序之所以出错,是因为在application.run建立的退出过程中释放login_kf单元,而此单元在内存中已不存在!
action:=cafree;