目前开发一个项目,主程序是一个窗口菜单,所有功能的实现都是通过调用外部DLL实现的,目前在一个外部窗口中,我用的是Show,我只要在主程序的空白位置上点击一下,外部窗口就隐藏起来了,跑到主程序后面去了,能不能限制一下,打开多窗口的同时,在调用多窗口的界面中点击任何位置,被激活的窗口始终显示在主程序前面??

解决方案 »

  1.   

    看看这样能不能满足你的要求
    FormB.Parent := FormA;
    FormB.Show;
      

  2.   

    我是通过dll调用的,这样可以吗?是不是要把父窗口做为参数传给子窗口?
      

  3.   

    刚刚试过了,子窗口.Parent:=application.MainForm;这样做没有作用.
      

  4.   

    EnableWindow(Application.Handle, False);
    try
      // Call Dll
    finally
      EnableWindow(Application.Handle, True);
    end;
      

  5.   

    调用DLL时,将窗口的HANDLE传到DLL中,赋于被调用窗口的HANDLE
      

  6.   

    因为Dll和exe共享一个进程空间,也可以用指针的方式传递
    ----------------------------------------------------------
    Dll的函数可以这样写:type
        pTForm = ^TForm;function ShowForm(pParent : Pointer) : Boolean;stdcall;
    var
        pForm : pTForm;
    begin
        try
            pForm := pTForm(pParent);
            FormB.Parent :=  TWinControl(pForm^);
            FormB.Show;
            Result := True;
        except
            Result := False;
        end;
    end;
    ----------------------------------------------------调用的时候:procedure TFormA.Button1Click(Sender: TObject);
    begin
        ShowForm(@Self);
    end;
      

  7.   

    konhon(优华) 的方法行不通,这样做和ShowModule效果是一样的,不支持同时打开多个窗口。
      

  8.   

    欢迎加入Borland DELPHI女程序员,参与群里技术讨论!欢迎女孩子,也欢迎男孩子参与技术讨论!群号15154361
      

  9.   

    我的DLL中的子窗口并非单纯的子窗口,还包括了其它一些孙窗口。所以还牵涉到其它窗口的创建和释放问题,请问有什么需要注意的?