【问题标题】:How hide an Form of a dll file?如何隐藏 dll 文件的表单?
【发布时间】:2016-01-30 21:44:08
【问题描述】:

我有一个包含多个表单的 dll 文件。

我在加载此 dll 的控制台应用程序中引用了 main 函数。

我想隐藏 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.

【问题讨论】:

  • 如果你想隐藏它,为什么要显示它?
  • 嗯...不要打电话给ShowDllForm? (顺便说一句,您的问题很有趣。如何显示来自 DLL 的表单?,然后是 如何不显示来自 DLL 的表单?,在一对夫妇中几个小时。接下来是什么?)
  • @KenWhite,关于我的最后一个问题,有必要执行Form1(主表单),因为我的软件工作正常。但是现在,我想执行,但没有用户可以看到这个表单。所以,你有一些解决这个问题的建议(或尝试解决),朋友?如果没有显示此表格,我的软件将无法运行。因为dll文件中的其他表单依赖于这个主表单。
  • 隐藏 dll 文件的表单比 VCL 表单更难:-(。我不知道该怎么做。
  • 是的,我有一些建议。如果您的应用程序依赖于 GUI,请不要将其设为控制台应用程序。如果没有,请不要包含 GUI 窗口。如果它需要在后台运行,请将其设为服务。如果您需要一个 UI 来控制该服务,请将其编写为一个单独的应用程序并使用进程间通信让它们相互交谈。除此之外,完全不清楚您要做什么,如果没有更多信息,我将无法提供任何帮助;你的整个设计在我看来都是错误的。

标签: forms delphi dll


【解决方案1】:
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;

【讨论】:

    【解决方案2】:

    解决方案:

    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.
    

    FormActivate 事件中的 dll 文件:

    Form1.Hide; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 2013-07-15
      • 2021-05-02
      • 1970-01-01
      相关资源
      最近更新 更多