我的DLL中有FORM,当调用这个DLL,显示其中的FORM时,在任务栏上会显示
这个FORM的标题,似乎把这个FORM视为一个独立的程序,而且有几个FORM
就会在任务栏上显示几个,即便是一个INPUTBOX,在任务栏上也会出现一个
任务。
我想要在调用这个DLL时任务栏不显示任何信息,请指教!

解决方案 »

  1.   

    SetParent(DLL窗口句柄, application.handle)试试.
    偶是马甲,别给偶分.
      

  2.   

    每打开一个DLL中的窗体,就会在任务栏产生一个图标,而且图标和主窗体的不一样,怎么隐藏,或者是改变图标? 以下是代码,麻烦老兄帮忙看看,该在哪里改写,万分感谢
    DLL
    =============
    library IEBrowserHelper;
    uses
      ComServ,
      _IEBrowserHelper in '_IEBrowserHelper.pas';
      exports
      DllGetClassObject,
      DllCanUnloadNow,
      DllRegisterServer,
      DllUnregisterServer;
    begin
    end.
    =======================
    以下就是那个被显示出来的form
    =====================
    unit IehelperForm;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
    type
      THelperForm = class(TForm)
        Memo1: TMemo;
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    implementation
    {$R *.DFM}
    uses _IEBrowserHelper;
    procedure THelperForm.Button1Click(Sender: TObject);
    var
      X: OleVariant;
    begin
      IE.Navigate(Edit1.Text, X, X, X, X);
    end;
    end.
      

  3.   

    library IEBrowserHelper;
    uses
      ComServ,
      _IEBrowserHelper in '_IEBrowserHelper.pas';procedure ShowForm(AHandle:THandle);StdCall;  //在DLL单元声明显示窗体的函数
    begin
      HelperForm := THelperForm.Create(Application);
      HelperForm.ShowModal;
      HelperForm.Free;
    end;
      exports
      DllGetClassObject,
      DllCanUnloadNow,
      DllRegisterServer,
      DllUnregisterServer,
      ShowForm name 'ShowForm';//加上这句
    begin
    end.
      

  4.   

    看看这里:
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=1022
      

  5.   

    感觉是
    ShowWindow(Handle,SW_HIDE);
    ShowWindow(Application.Handle,SW_HIDE);
    这样吧!
      

  6.   

    :)
    在Dll的FormOnCreate中加上
    SetWindowLong(Self.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
    试试看
      

  7.   

    我给的不是 FAQ 吗?
    每打开一个DLL中的窗体,就会在任务栏产生一个图标,而且图标和主窗体的不一样,怎么隐藏,或者是改变图标?  
    ---------------------------------------------------------------  
     
    在DLL里写一个函数,将EXE的主窗口的句柄传给DLL使用。在DLL的Form里,  
    重载TForm的虚函数CreateParams。  
     
    HWND  hMainWnd  =  NULL;  
    void  __export  SetMainWnd(HWND  hWnd)  
    {  
           hMainWnd  =  hWnd;  
    }  
     
    void  __fastcall  TDllForm::CreateParams(TCreateParams&  Params)  
    {  
           TForm::CreateParams(Params);  
           Params.WndParent  =  hMainWnd;  //DLL中的窗体就不会在任务栏中出现了  
    }  
     
    ---------------------------------------------------------------  
     
    其实不用那么复杂,只要在DLL中设置Application->Handle为主程序窗口的Handle就可以了,你看看TApplication的Handle属性的帮助就明白了。  
     
    我的解决方法如下:  
    DLL中:  
    extern  "C"  __declspec(dllexport)  void  __stdcall  SetDLLAppHandle(HWND  MainWindowHandle);  
    void  __stdcall  SetDLLAppHandle(HWND  MainWindowHandle)  {  
                   Application->Handle  =  MainWindowHandle;  
    }  
    主程序主窗体OnCreate:  
    void  __fastcall  TFormMain::FormCreate(TObject  *Sender)  
    {  
                   SetDLLAppHandle(Handle);  
    }
      

  8.   

    用 naughtyboy(重归起跑线)  的方法:
     
    在Dll的FormOnCreate中加上
    SetWindowLong(Self.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);  
     
      

  9.   

    我写在DLL中的窗体是没有这个问题,但问题是DLL的MDI子窗体上菜单虽然可以自动融合到主窗体中,但却不能在菜单上显示图标以及执行菜单命令。菜单加了图标,加载时就会出错,而如果执行了命令,在关闭窗体时会出错。全是运行期的错误,编译时一点问题都没有。