我有一个包含多个表单的dll文件。
我在控制台应用程序中引用了加载此dll的主函数。
我想隐藏dll文件的主要形式,但到目前为止的所有尝试都没有成功。
我为此尝试了几种方法,但除了从任务栏隐藏外,我尝试过的任何方法都没有。
这是我的代码:
dll上的主要表单
unit Conectar;
interface
uses
Windows, Messages, SysUtils, Classes {.......};
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
params.exstyle := params.exstyle and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Form1.Handle,SW_HIDE);
end;
DLL的
library DLL;
uses
System.SysUtils,
Conectar,
vcl.Forms,
Classes;
{$R *.res}
procedure ShowDllForm; stdcall;
begin
Form1 := TForm1.Create(nil);
try
Form1.ShowModal;
finally
FreeAndNil(Form1);
end;
end;
exports
ShowDllForm;
begin
end.
控制台应用
{$APPTYPE GUI}
var
Msg: TMsg;
procedure ShowDllForm;stdcall;
external 'DLL.dll' name 'ShowDllForm';
begin
CoInitialize(nil);
ShowDllForm;
CoUninitialize;
end.
答案 0 :(得分:0)
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;
答案 1 :(得分:-1)
解决方案:
<强> DLL的 强>
procedure ShowDllForm; stdcall;
begin
Application.CreateForm(TForm1, Form1);
ShowWindow(Application.Handle, SW_HIDE);
end;
控制台应用
var
Msg: TMsg;
begin
ShowDllForm;
while GetMessage(Msg, 0, 0, 0) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
OR
在FormActivate
事件中的dll文件:
Form1.Hide;