上次我是这样说的:
两个窗体Form1和Form2,他们都有一个button可以调用同一个窗体Form3,
请问,在Form3的onshow事件中,我如何得到Form3的父窗体是Form1呢还是Form2?
解决立即给分,搜索了一下没发现匹配的。但其实怪我自己没有说清楚,应该是这样的:
工程中,只有Form1是刚开始就创建的,Form1上有两个button,分别可以动态创建Form2和Form3,
而Form2和Form3中分别有一个button,Form2和Form3中的button事件都是动态创建Form4,现在我想要在Form4中依据不同的情况(不同情况指从Form2过来的还是从Form3过来的),在Form4的onshow事件中实现针对其不同父窗体(不知道可以这样称呼它们不)的不同的功能。除了Form1的borderstyle为bsSizeable之外,其余窗体的borderstyle均为bsDialog。
button动态创建窗体的代码格式为:
  if not Assigned(Form2) then Application.CreateForm(TForm2,Form2);
  Form2.ShowModal;谢谢!
刚才那贴由于我的问题没有问清楚,
而各位的帮忙已经实现我当时问的问题,
所以先结贴,
重新开一个重新问。
解决立即给分。

解决方案 »

  1.   

    可以在Form4里面设置一个公共的变量标识吧
     if not Assigned(Form2) then Application.CreateForm(TForm2,Form2);
        form2.myCreate = 'A'..
      Form2.ShowModal;
      

  2.   

    if not Assigned(Form2) then   
       Application.CreateForm(TForm2,Form2);
        form2.Parent := form3;
      Form2.ShowModal;
      

  3.   

    还是不怎么明白楼主的意思
    既然你在form2中,动态创建form4 ,那你就可以把相应的动作写上啊
      

  4.   

    procedure TForm4.FormShow(Sender: TObject);
    begin
      if (Parent = form3) then
      begin  end;
      if (Parent = form2) then
      begin  end;
    end;
      

  5.   

    Cannot focus a disabled or invisible window.
    我在Form4的onshow事件中要依据父窗体的不同来做不同的处理的啊。
    如果使用上面说的form2.parent := form3的话,就会出Cannot focus a disabled or invisible window.的错误的。
      

  6.   

    问题中已经说了:“除了Form1的borderstyle为bsSizeable之外,其余窗体的borderstyle均为bsDialog。”
    所以就会出我上面说的Cannot focus a disabled or invisible window.的错误啊。
      

  7.   

    procedure TForm4.FormShow(Sender: TObject);
    begin
      if (Parent = form3) then
      begin  end;
      if (Parent = form2) then
      begin  end;
    end;
      

  8.   

    你们说的情况我已经做过了测试
    问题是你们说的方法中
    Form4中不能有button之类的东西啊
    有的话就会出上面的错误
    如果没有的话什么错误都没有
      

  9.   

    你在form4中加一个变量  
    private
      CallForm: String然后在
    procedure TForm3.Button1Click(Sender: TObject);
    begin
      if not Assigned(Form4) then   
         Application.CreateForm(TForm2,Form2);
      form4.CallForm:= 'form3';
      Form4.ShowModal;
    end;procedure TForm2.Button1Click(Sender: TObject);
    begin
      if not Assigned(Form4) then   
         Application.CreateForm(TForm2,Form2);
      form4.CallForm:= 'form2';
      Form4.ShowModal;
    end;
    最后
    procedure TForm4.FormShow(Sender: TObject);
    begin
      if (CallForm = 'form3') then
      begin  end;
      if (CallForm = 'form2') then
      begin  end;
    end;
      

  10.   

    变量定义为公有
    public
      CallForm: String
      

  11.   

    你用(前提:Form4中uses了Form2,Form3):
      if Form4.Owner = Form2 then
      ...
      else if Form4.Owner = Form3 then
      ...
    试试看,或者:
      if Form4.Owner.Name = 'Form2' then
      ...
      else if Form4.Owner.Name = 'Form3' then
      ...