我的DLL中有FORM,当调用这个DLL,显示其中的FORM时,在任务栏上会显示
这个FORM的标题,似乎把这个FORM视为一个独立的程序,而且有几个FORM
就会在任务栏上显示几个,即便是一个INPUTBOX,在任务栏上也会出现一个
任务。
我想要在调用这个DLL时任务栏不显示任何信息,请指教!
这个FORM的标题,似乎把这个FORM视为一个独立的程序,而且有几个FORM
就会在任务栏上显示几个,即便是一个INPUTBOX,在任务栏上也会出现一个
任务。
我想要在调用这个DLL时任务栏不显示任何信息,请指教!
解决方案 »
- 多线程程序不能断点调试?运行之后不会触发
- 懂得用server页下控件的请进来帮个忙
- 一个关于dbgrid的问题
- 这个简单的聊天室程序,编译是出错~!!~?
- 如何保证两个RichEdit控件步调一致?
- 一个关于PARENT属性的问题.
- DMF格式地电子书用什么看
- 由Foxmail导出若干MSG文件,其汉字部分均变成了=??=??的乱码,请问这是种什么编码,怎么还原成汉字?
- delphi中有没有能显示html文件的类似memo的控件,或者给推荐一个好用的控件下载
- 在这种情况下怎样实现?急急急!!!
- 请问什么情况下会出现'Bitmap image is not valid'的错误?
- midas中登录Dcom时的用户问题
偶是马甲,别给偶分.
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.
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.
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=1022
ShowWindow(Handle,SW_HIDE);
ShowWindow(Application.Handle,SW_HIDE);
这样吧!
在Dll的FormOnCreate中加上
SetWindowLong(Self.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
试试看
每打开一个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);
}
在Dll的FormOnCreate中加上
SetWindowLong(Self.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);