是这样,主窗体MainForm是开始就加载,其它是动态的。窗体PicForm是通过以下动态生成窗体函数加载://显示窗体
function ExeForm(AFormClass:TFormClass):Boolean;Overload;
begin
  Screen.Cursor:= crHourGlass;
  with AFormClass.Create(Application) do
  begin
    Screen.Cursor:= crDefault;
    Position:=poScreenCenter;
    Show;  //改为另一种方式会出错
  end;
end;而窗体PicCutForm又是在Picform上加载,也是通过上面的函数,因为窗体PicCutForm要调用PicForm里image1的长,宽。。但运行程序后,一打开PicCutForm就出错,为什么啊。。我把上面那个函数的SHOW改成Showmodal也不行
全部改为类似于以下的方式也不行        if not Assigned(PicCutForm) then PicCutForm.Free;
Screen.Cursor:=crHourGlass; 
PicCutForm:=TPicCutForm.Create(self);
PicCutForm.Position:=poScreenCenter;
Screen.Cursor:=crDefault;
PicCutForm.Show;什么原因啊?好怪啊!折腾了近一个上午

解决方案 »

  1.   

    楼主应该把你的调试过程和出错记录发出来,不然大家怎么分析?
    不过在楼主的描述和代码中,我认为可能原因如下:(不一定对,楼主可一试)
      假如你的TFormClass的定义类似为Type TFormClass=Class of TForm,我觉得问题可能会出在这一句:
      with AFormClass.Create(Application) do
      窗体的创建我没有见过这样的创建函数,一般我都是用Application.CreateForm(TForm1, Form1);
      两个参数分别是待创建的窗体对象类名及其实例名
      楼主可以改为Application.CreateForm(AFormClass,aForm)试试
      

  2.   

     
    with AFormClass.Create(Application) do
      begin
        Screen.Cursor:= crDefault;
        Position:=poScreenCenter;
        Show;  //改为另一种方式会出错
      end;
    这句话并没有把生成的窗体对象赋值给一个全局的form变量,而且也并没有作为另一个窗体的属性穿给它,那么在另一个窗体中应该是无法访问到的,不知道你另一个窗体的访问代码是怎么写的
      

  3.   

    释放窗体时 指空窗体指针  freeandnil(窗体)  assinged()可以找到窗体指针,但找不到实例 所以报地址错误
      

  4.   

    if not Assigned(PicCutForm) then PicCutForm.Free;这段也有问题  如果没找到piccutform 意思piccutform没找到,你释放做什么?if assigned(piccutform) then PicCutForm.bringtofront or showmodalif not assigned(xxx) then piccutform:=Tpic.create(application)当窗体释放时用freeandnil