我的程序中,有FormMain,FormLogin,FormExe(TDataBase控件放在FormMain上)(非MDI窗体);
在project的属性中,mainform为主窗体。程序启动是自己添加的代码:
  Application.Initialize;
  Application.CreateForm(TFormMain, FormMain);
  Application.CreateForm(TFormLogin, FormLogin);
  FormLogin.ShowModal;
  Application.Run;
在登录窗体验证成功后:
procedure TFormLogin.ButtonLoginClick(Sender: TObject);
begin   
   formMain.ShowModal;
   formlogin.Close;
end;
并且,FormLogin里用全局变量username记录了登录用户。
至此,一切正常。登录正常,主窗口也显示正常。
但是,打开FormExe时问题出现了错误提示:
 ------------------------------------------------------------------------- |     Access Violation at address 00458332 in module'Project1.exe'.Read |
 | of address 000002EC                                                   |
 -------------------------------------------------------------------------
其中:
procedure TFormMain.Button1Click(Sender: TObject);
begin   
  formExe.Show;
  formExe.manualDock(panel1,nil,alNone);
end;
在formExe里引用了unitLogin并且使用了变量username,引用了unitMain并连接了TDataBase.
请问,我哪里措了?怎么改呢?

解决方案 »

  1.   

    问题出在这句吧.
    formExe.manualDock(panel1,nil,alNone);
      

  2.   

    formExe没有自动创建,在project source里加上:
      Application.Initialize;
      Application.CreateForm(TFormMain, FormMain);
      Application.CreateForm(TFormLogin, FormLogin);
      Application.CreateForm(TFormExe, FormExe);
      FormLogin.ShowModal;
      Application.Run;
      

  3.   

    formExe窗体没创建就使用,试试下面
    procedure TFormMain.Button1Click(Sender: TObject);
    begin   
      formExe:= TformExe.Create(application); // 加上这一句
      formExe.show;
      formExe.manualDock(panel1,nil,alNone);
    end;
      

  4.   

    formExe在那里create的没有看到,而且你的引用也
    太混乱了,学要整理清楚,username既然是全局变量,
    就拿出来放到一个单独的unit里,TDataBase也拿出来
    放到一个专用的单元里.