我在工程的主窗口里,用ocx.create(self)方法创建了一个自己开发的activexform控件类型的对象,
在程序运行时,凡是这个控件里打开的窗口(在控件里通过form.create(self),然后showmodal),都会在windows的任务栏里显示出来,这样打开的窗口多了以后,windows任务栏里就会排满了窗口。
为什么不能像在一个工程里那样,不管打开多少个窗口,在windows任务栏里始终只显示程序的主窗口?

解决方案 »

  1.   

    formstyle都是fsnormal,没用mdi的方式。
      

  2.   

    把Application传递给OCX,
    记住原来的Application对象.
    在OCX中设置Application=传递进来的Application,释放OCX的时候还原Application.
      

  3.   

    请问,如何把application传递给ocx?
    如果在ocx中做一个接口来接收,那接收的参数类型怎么设置?
      

  4.   

    主窗体的模式设置为fsMDIform,子窗体设置为fsMDIchild,并且在project菜单下将child属性的窗体从左侧的列表中移动到右侧
      

  5.   

    在activexform中,哪个是主窗体呢?
      

  6.   

    你传递:
        Application.Handle
    你自己测试一下,我以前写Dll的时候也有这种现象,反正是通过Application搞定的.
    你然后创建窗体用:Create(Application)
      

  7.   

    我测试通过了:
    下面的代码放在EXE中:
      TFunction1=procedure Stdcall;
      TFunction2=procedure (HostAppHandle: THandle); Stdcall;procedure TForm1.BitBtn2Click(Sender: TObject);
    var
      handle: THandle;
      myFunction1: TFunction1;
      myFunction2: TFunction2;
    begin
    //加载插件
      handle:=LoadLibrary('H:\MyProgram\BBS\Bin\test.dll');
      if handle <= 0 then
      begin
        MessageBox(Application.Handle,'无法加载动态库','asf',MB_OK);
        exit;
      end;//获取插件初始化函数地址
      @myFunction1:=GetProcAddress(handle,'showForm2');
      @myFunction2:=GetProcAddress(handle,'SetApplicationHandle');
      if not Assigned(myFunction1) then
      begin
        MessageBox(Application.Handle,'无效的动态库','asf',MB_OK);
        FreeLibrary(handle);
        exit;
      end;
      //myFunction2(Application.Handle);
      myFunction1;end;
      

  8.   

    我用的不是动态库,是activexform啊
      

  9.   

    上面的我没有说完,我没有开发过OCX你参考一下dll吧,我认为原因是一样的!
    你创建一个DLL,导出两个函数
      TFunction1=procedure Stdcall;
      TFunction2=procedure (HostAppHandle: THandle); Stdcall;
    TFunction1,用于show一个FORM,
    AForm.Create(Application).Show;TFunction2,用于设置Application.handle:
    Application.Handle:=HostAppHandle;运行EXE,此时点击按钮,必然在状态条上出现两个任务条.现在将Exe程序中的:
    //myFunction2(Application.Handle);取消注释.在运行程序,则只有一个任务条了.
    我想OCX也有这个问题,可能途径不同.你自己查资料.