首页 > 其他分享 >Delphi调用BPL并显示窗体

Delphi调用BPL并显示窗体

时间:2024-02-28 15:11:28浏览次数:18  
标签:end Delphi Vcl BPL TForm2 PackageHandle 窗体 FormClass

bpl

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm2 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  ShowMessage('BPL包中的消息');
end;

initialization
//注册类
RegisterClass(TForm2);

finalization
//取消注册类
UnRegisterClass(TForm2);

end.

主程序

procedure TForm1.Button1Click(Sender: TObject);
var
  BPLFileName: string;
  PackageHandle: HMODULE;
  FormClass: TFormClass;
  FormInstance: TForm;
begin
  BPLFileName := ExtractFilePath(Application.ExeName) + 'Package1.bpl';
  PackageHandle := LoadPackage(BPLFileName);
  if PackageHandle <> 0 then
  begin
    FormClass := TFormClass(GetClass('TForm2'));
    if Assigned(FormClass) then
    begin
      FormInstance := FormClass.Create(Application);
      try
        FormInstance.ShowModal;
      finally
        FormInstance.Free;
      end;
    end
    else
      ShowMessage('Failed to find form class in BPL');

    UnloadPackage(PackageHandle);
  end
  else
    ShowMessage('Failed to load BPL package');
end;

 需要注意程序中需要勾选Link with runtime packages不然FormClass会等于nil

标签:end,Delphi,Vcl,BPL,TForm2,PackageHandle,窗体,FormClass
From: https://www.cnblogs.com/liessay/p/18040468

相关文章

  • (六)ADO.NET用窗体应用程序写增删查改——删(1.1升级版)
    在1.0版本中,我们的“删除”按钮只能在后台写死语句删除某条数据,这节通过选中dataGridView控件中数据进行任意删除。紧接上一节“增加”代码,我们在删除按钮中直接修改代码即可:一、双击“删除”按钮进入Click事件二、编写代码如下//1.创建连接数据库字符串......
  • 去除窗体边框代码说明
    去除窗体边框1.属性中设置边框BorderStyle=bsNone2.ClientEvents-UniEvents事件中写代码functionwindow.beforeInit(sender){Ext.apply(sender,{border:false,baseCls:'',//这个很关键背景透明shadow:false,frame:false,//width:400,//height:......
  • 代码中打开新窗体,前端和后端
    前端:1、window.open()window.open() 方法是JavaScript中的一个内置方法,用于在浏览器中打开一个新的窗口或标签页。1)语法:window.open(url,name,features,replace);注意:由于弹出窗口的滥用已经成为了一个安全问题,现代浏览器通常会默认阻止 window.open() 方法的调用,除非是......
  • delphi 提高unigui开发效率的两个方法
    1、编译时自己退出运行的程序。在做unigui开发时,每次编译运行时,unigui的应用都会在后台运行,每次重新编译时都必须手工在任务栏里将应用退出才行,非常麻烦,可以在项目编译的参数里加上杀进程的命令,这样每次重新编译时就会自动将旧的进程杀掉。命令参数如下:taskkill/f/im$(OUTPUT......
  • C#无标题栏窗体的移动
    C#无标题栏窗体的移动转载于:https://www.cnblogs.com/magicianlyx/p/4918153.html首先C#无标题栏窗体的实现代码在load时实现无工具栏+无窗口标题privatevoidForm1_Load(objectsender,EventArgse){this.ControlBox=false;this.Tex......
  • C# WinForm中 获得当前鼠标所在控件 或 将窗体中鼠标所在控件名显示在窗体标题上
    C#WinForm中获得当前鼠标所在控件或将窗体中鼠标所在控件名显示在窗体标题上原文地址:http://www.cnblogs.com/08shiyan/archive/2011/04/14/2015758.html/***********************课题:将窗体中鼠标所在控件名显示在窗体标题上*作者:ZAXX*QQ:94027486*本课题可......
  • WPF资源管理:窥探外部、窗体、全局和动态资源的秘密!
    概述:WPF中的资源管理机制包括外部资源、窗体资源、全局资源和动态资源。通过这些资源,开发者能够在应用程序中有效地组织、重用样式和模板,实现灵活的设计和运行时更改。这四种资源类型分别适用于不同的应用场景,为WPF应用程序提供了强大的扩展性和可维护性。在WPF(WindowsPresentat......
  • delphi Byte 与 AnsiChar、WideChar 相互转换
    Byte与AnsiChar、WideChar相互转换代码Byte转AnsiChar、WideCharprocedureTForm1.Button1Click(Sender:TObject);varac:AnsiChar;wc:WideChar;bys:TBytes;begin//ANSI编码ac:='a';bys:=BytesOf(ac);Memo1.Lines.Add(bys[0].ToString);......
  • Excel窗体控件笔记
    工作表控件分成2种表单控件(图片上面)ActiveX控件(图片下面)一,表单控件这种如果只是使用代码其实和我们直接在工作表里插入一个图形是一样的效果可以把一些参数直接设置到单元格里,不需要代码辅助,配合公式等可以实现一些自动化效果但是,设置不了一些颜色样式等等,看上去比较素......
  • delphi10.3农历日历控件安装使用
    控件下载,链接: https://pan.baidu.com/s/1-ZJFRMT2z5_kti0LX7bHCw提取码:2anv  Delphi10.3在File菜单下,选择”OPEN…”打开ChnCalendars.dpk文件    打开自带DemoD:\迅雷下载\ChnCalendar3.0Beta20......