如何隐藏DLL文件的表单?

时间:2016-01-30 21:44:09

标签: forms delphi dll

我有一个包含多个表单的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.

2 个答案:

答案 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;