原帐为:
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错。 谢谢各位的指教!

解决方案 »

  1.   

    if 条件 then
    begin
     login_kf.Hide;
     login_kf.Free;
     Application.Run;
    end  else
    begin
    //先把你的这个对话框所占的资源释放掉再退出看看:
    login_kf.free;
    login_kf := nil;
      application.Terminate;end;
      

  2.   

    if 条件 then
    begin
     login_kf.Hide;
     login_kf.Free;
     Application.Run;   // Run在If里
    end  else           //
    begin
      application.Terminate;   //没有Run就Terminateend;
      

  3.   

    if 条件 then
    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;
      

  4.   

    if 条件 then
    begin
     login_kf.Hide;
     login_kf.Free;
     Application.Run;   
    end  else           //
    begin
      login_kf.Free;
      halt;
    end;
      

  5.   

    TO 楼上的大侠们:
       问题是:登录 “取消”时没有错,但进入主程序后退出就出错。我感觉是
    if 条件 then
    begin
     login_kf.Hide;
     login_kf.Free;
     Application.Run; 
    end  
    中有问题,而project 中已经application.run了。
      

  6.   

    if 条件 then
    begin
     login_kf.Hide;
     login_kf.Free;
     Application.Run;   //错错错错错错错错错错错吗?
    end  
      

  7.   

    那在登陆界面的formclose中
    把你的这个对话框所占的资源释放掉再退出看看:这样应该就可以了吧?
      

  8.   

    试过了,也不行,我怀疑是Application.Run;   //错 的错因为project已经运行了,但运行mainform.show也不行。
      

  9.   

    其实本程序出现错误的原因是不适宜的释放了login_kf单元,解决方法有三:
    一、本人上面已经提供的(只是在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单元,而此单元在内存中已不存在!
      

  10.   

    补充:其实在当前类中不要释放当前类(只有在MDI模式下在 close的方法中设置
    action:=cafree;