015.Delphi插件之QPlugins,FMX插件窗口
时间:2019-09-11
本文章向大家介绍015.Delphi插件之QPlugins,FMX插件窗口,主要包括015.Delphi插件之QPlugins,FMX插件窗口使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
内嵌FMX的插件窗口,效果还是很可以的。退出时,会报错,很诡异啊。
主窗口代码如下
unit Frm_Main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, qplugins_vcl_formsvc, qplugins_loader_lib, qstring, qplugins_base, qplugins, qplugins_params, qplugins_vcl_Messages, qplugins_formsvc, Vcl.StdCtrls; type TForm_Main = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form_Main: TForm_Main; implementation {$R *.dfm} // 按钮_FMX窗口 procedure TForm_Main.Button1Click(Sender: TObject); var AFormService: IQFormService; AParam: IQParam; begin // 在这个路径查找服务 if Supports(PluginsManager.ByPath('/Services/Docks/Forms/FMXForm'), IQFormService, AFormService) then begin // 模态显示窗口 // 输出窗口信息 ShowMessage(ServiceSource(AFormService as IQService)); // 模态显示窗口 AFormService.ShowModal(nil, nil); end; end; // 创建 procedure TForm_Main.FormCreate(Sender: TObject); var APath: string; begin ReportMemoryLeaksOnShutdown := True; // 加载同目录的DLL插件 APath := ExtractFilePath(Application.ExeName); PluginsManager.Loaders.Add(TQDLLLoader.Create(APath, '.dll')); // 启动 PluginsManager.Start; end; end.
FMX的DLL插件代码如下
unit Frm_Fmx; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Ani, FMX.Objects, QPlugins, qplugins_fmx_messages, qplugins_formsvc, qplugins_fmx_formsvc, FMX.Edit; type TForm_Fmx = class(TForm) Label1: TLabel; Panel1: TPanel; Image1: TImage; FloatAnimation1: TFloatAnimation; Edit1: TEdit; Edit2: TEdit; private { Private declarations } public { Public declarations } end; var Form_Fmx: TForm_Fmx; implementation {$R *.fmx} { procedure ShowFMXForm; begin // 创建窗口 Form_Fmx := TForm_Fmx.Create(nil); FreeAndNil(Form_Fmx); end; exports ShowFMXForm; } initialization // 注册2个窗体服务 RegisterFormService('/Services/Docks/Forms', 'FMXForm', TForm_Fmx, True); RegisterFormService('/Services/Docks/Forms', 'FMXDock', TForm_Fmx, False).Align := faLeftBottom; finalization // 注销 UnregisterServices('/Services/Docks/Forms', ['FMXForm', 'FMXDock']); end.
原文地址:https://www.cnblogs.com/tianpan2019/p/11505424.html
- phalcon-入门篇9(view层基础使用)
- PhalApi视频教程
- 【学术】一文搞懂自编码器及其用途(含代码示例)
- PhalApi-Zip--压缩文件处理类
- PhalApi-Xhprof -- Facebook开源的轻量级PHP性能分析工具
- OpenAI发布8个模拟机器人环境以及一种HER实现,以训练实体机器人模型
- PhalApi-APK--APK文件解包处理
- [喵咪PHP]页面显示空白问题
- 数据库中间件 Sharding-JDBC 源码分析 —— 结果归并
- PhalGo-Request
- PhalApi-Excel
- PhalGo-Viper获取配置
- Dubbo 源码解析 —— 集群容错架构设计
- PhalGo-ADM思想
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 推荐一套个人文档管理系统。
- OpenCV图像读取(imread) 显示(imshow) 保存(imwrite)的冷知识点
- CodeReview实践-Gerrit自动触发JenkinsCI
- OpenCV常用图像拼接方法(一) :直接拼接
- ClickHouse|MergeTree引擎之数据分区
- OpenCV常用图像拼接方法(二) :基于模板匹配拼接
- 为了解决 Prometheus 大内存问题,我竟然强行将 Prometheus Operator 给肢解了。。
- 面试官:webpack原理都不会?
- 算法篇:树之对称二叉树
- 算法篇:树之二叉树的恢复
- 算法篇:树之利用数组处理链表
- 灰子的Go笔记:sync.Map
- 最炫酷的 Kubernetes Dashboard:Octant 迎来重大更新!
- 算法篇:树之树的层次遍历
- mybatis-plus:性能分析插件与性能分析打印