如果MDI的主窗口叫做
Frame : TFrame
子窗口叫做
Child1 : TfrmChild;
我需要在子窗口中调用Frame.WorkSpaceRect()这样的一个函数,那么我起码要得到Frame的指针。可是如何获得呢?
Child1.Parent不行,其中的值是nil
我可以用GetParent(Child1.handle)得到主窗口的句柄然后就不知道怎么做了。
现在我的替代做法是这样
TFrame(Application.MainForm).WorkSpaceRect()
但是如果MDI的主窗口不是这个程序的MainForm就不知道该怎么做了。

解决方案 »

  1.   

    如果知道句柄,你可以用如下函数找到实例
    function FindControl(Handle: HWnd): TWinControl; //Controls.pas同时有两个MDIForm容易,但怎么在不是MainForm的MDIForm里放MDIChild?
      

  2.   

    如果是在一个程序里,而且能保证在Child存在时Frame一定存在,那就直接调用吧,Frame缺省是一个全局变量。...
      if Assigned(Frame) then
         Frame.WorkSpaceRect();...
      

  3.   

    如果你的子窗体是手动创建的,那么可以考虑把子窗体的Owner设成Frame,或者干脆给子窗体添加一个MDIParent属性,在创建的时候初始化就行了。
      

  4.   

    use 一下你的主窗体单元,什么事情都可以做了
      

  5.   

    在主窗口的单位初始化部分用RegisterClass(TMainForm);
    然后在调用时用FindClass('TMainForm')
      

  6.   

    能不能动态获得
    uses 一下你的主窗体单元,会使得各个模块间的耦合度变得很大,什么循环引用PAS之类的问题就老是会出现了.