问题一:我在MDI父窗口(formstyle属性设为fsMDIForm)的菜单中打开一个MDI子窗   口(formstyle属性设为fsMDIChild),出来提示一个出错窗口说什么当前没有活动的主窗口什么的,但我把那个要打开的窗口的formstyle属性另设为fsNomal就可以打开,但是
效果不好,纳闷。
问题二:我在MDI父窗口的退出菜单中写代码"close;"然后在MDI父窗口的onclose中写如下代码:
 if messagebox(form1.Handle,'请确定是否退出?','提示',MB_YESNO)=IDYes then
 begin
   //关闭子窗口
   for i:=0 to form1.MDIChildCount-1 do
      form1.MDIChildren[i].close;
   action:=cafree;
   application.Terminate;
 end
 else
   action:=canone;
为什么我不能退出程序呢?我这么认为是因为我是在开发环境中运行的,退出后不能回到运行前的状态,要单击菜单run->program reset才行。
当然我也试过在退出菜单中直接写application.terminate;但是会显示有Eaccessviolation异常的提示框。
请大家多多指点。

解决方案 »

  1.   

    一:打开的语句是什么, 不能为Showmodal, 而只能是show. 另外,是Auto-Create还是自已动态创建(看一看Project/options就知道了)
    二. 有点混乱, 整个系统的退出用Application.Terminate;而且一次就行, 多次反而出错, 也不用循环,确定退出就Terminate就行了。
      

  2.   

    To xirumin(吃好喝好) 
    我试过,直接用在菜单里用application.terminate,可是不能正常关闭,出来提示框"Project gzxtclient.exe raised exception class EAccessVilation with message 'Access violation at address 00000000.Read of address 00000000'.Process stopped.Use step or Run to continue"
      

  3.   

    不用写那么多,就一个action:=cafree;
      

  4.   

    1.把MDI窗体设为主窗体。
    2.
    if messagebox(form1.Handle,'请确定是否退出?','提示',MB_YESNO)=IDYes then
     begin
       //关闭子窗口(不要)
       //for i:=0 to form1.MDIChildCount-1 do
       //   form1.MDIChildren[i].close;    action:=cafree;     
       application.Terminate;
     end
     else
       action:=canone;
      

  5.   

    onclose里面的代码全部去掉能不能关闭