⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 嘿嘿,大侠看到不要见笑呀... 大家都知道使用DLL的好处.于是我就想把FORM封装到DLL里面去. 到网上找,发现是MDI和模式窗体的,非模式的也有很多问题.便想自己解决这个问题. 原来是用
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TFrameClass = class of TFrame;
  //注意   必须是class of TFrame而不是 class(TFrame)
  //class of TFrame  声明的是类类型   f:TFrameClass是一个类
  //class(TFrame) 是声明一个类, 这个类继承了TFrame类 f: TFrame; 是一个对象
 TGetDllFrameClass = function (App:THandle;frm:THandle):TFrameClass;stdcall;
 TGetDllFormClass = function (App:THandle;frm:THandle):TFormClass;stdcall;
type
  TForm1 = class(TForm)
    btn1: TButton;
    pnl1: TPanel;
    btn2: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
       DLLHandle: THandle;
      GetDllFrameClass: TGetDllFrameClass;
      GetDllFormClass: TGetDllFormClass;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
 var
 TMP:TFrameClass;
 tmp2:TFrame;
  TMP3:TFormClass;
 tmp4:TForm;
{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
DLLHandle := LoadLibrary('DLL.dll');
     try
      @GetDllFrameClass := GetProcAddress(DLLHandle, 'GetDllFrameClass');
      if @GetDllFrameClass = nil then
        Abort;
        tmp:=GetDllFrameClass(application.Handle,Self.Handle);
       tmp2:=TMP.Create(self);
       tmp2.Parent:=pnl1;
      tmp2.Show;
   except
         raise;
    end;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin


DLLHandle := LoadLibrary('DLL.dll');
     try
      @GetDllFormClass := GetProcAddress(DLLHandle, 'GetDllFormClass');
      if @GetDllFormClass = nil then
        Abort;
        tmp3:=GetDllFormClass(application.Handle,Self.Handle);
       Application.CreateForm(tmp3,tmp4);
        tmp4.Show;
   except
         raise;
    end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -