var
  hMutex: HWND;
  Ret:Integer;
begin
  Application.Initialize;
  Application.Title := '管理系统';
  hMutex := CreateMutex(nil, False, 'HZWX');
  Ret:=GetLastError;
  if Ret<>ERROR_ALREADY_EXISTS then
  begin
    //显示启动窗口
    frmSplash := TfrmSplash.Create(Application);
    frmSplash.Show;
    frmSplash.Update;    //创建数据模块
    Application.CreateForm(TDataModule1, DataModule1);    //创建登录窗口
    frm_Login := Tfrm_Login.Create(Application);
    frm_Login.ShowModal;    //创建主窗体
    Application.CreateForm(TfrmMain, frmMain);    //释放启动窗口
    frmSplash.Hide;
    frmSplash.Free;    Application.Run;
  end
  else
    Application.MessageBox('本程序已经在运行!','错误',MB_ICONERROR);
  ReleaseMutex(hMutex);主程序的代码这样,目的是显示启动界面后进入登录界面,登录后才进入主界面。在运行后,一切正常,但在退出系统的时候,会出现读内存的错误提示。当我把    //创建数据模块
    Application.CreateForm(TDataModule1, DataModule1);    //创建登录窗口
    frm_Login := Tfrm_Login.Create(Application);
    frm_Login.ShowModal;
的顺序换一下,成这样:    //创建登录窗口
    frm_Login := Tfrm_Login.Create(Application);
    frm_Login.ShowModal;    //创建数据模块
    Application.CreateForm(TDataModule1, DataModule1);
退出系统的时候却又不会出错了。但问题是登录窗口要读表里的数据,因此必须数据模块要先创建。把创建数据模块放到前面,退出系统的时候又出错,请大侠们指点。

解决方案 »

  1.   

    DataModule1 也學 frm_Login 一樣這樣創建:DataModule1_Login := tDataModule1.Create(Application);
      

  2.   

    //显示启动窗口
        frmSplash := TfrmSplash.Create(Application);
    改为:
        frmSplash := TfrmSplash.Create(nil);
      

  3.   

    frmSplash := TfrmSplash.Create(Application);
        frmSplash.Show;
        frmSplash.Update;    //创建数据模块
        Application.CreateForm(TDataModule1, DataModule1);
        //创建主窗体
        Application.CreateForm(TfrmMain, frmMain);
         frmSplash.Free;
        //创建登录窗口
        frm_Login := Tfrm_Login.Create(Application);
        frm_Login.ShowModal;
        frm_Login.FREE;
        //释放启动窗口
           Application.Run;
      

  4.   

    我原来是在LOGIN窗体上再放一些数据控件,数据模块放再LOGIN窗体后创建,我现在不想这么做,所以把数据模块放再LOGIN窗体前创建,结果退出会出错,郁闷啊。
      

  5.   

    begin
        //显示启动窗口
        frmSplash := TfrmSplash.Create(Application);
        frmSplash.Show;
        frmSplash.Update;
        //创建主窗体
        Application.CreateForm(TfrmMain, frmMain);
        frmMain.hide; //主窗体隐藏
        //创建数据模块
        Application.CreateForm(TDataModule1, DataModule1);    //创建登录窗口
        frm_Login := Tfrm_Login.Create(Application);
        frm_Login.ShowModal;
        frm_Login.free;
        //释放启动窗口
        frmSplash.Hide;
        frmSplash.Free;
        frmMain.Show; //显示主窗体    Application.Run;
      end
      

  6.   

    感谢大家的热心帮助,都不是顺序的问题,而是我再LOGIN上放了个第三方控件,是它引起的,把它删了就没问题了,主要前两天看到论坛上有人问类似的问题,我的思维被那个帖子绕进去了,一直在顺序上绕,立马结贴。