[FMX]在 QPlugins 中 VCL 宿主使用 FMX DLL 需要手动处理的问题说明

由于众所周知的原因,FMX 的 DLL 在 FreeLibrary 时,会出现 AV 异常,这实际上包含了两方面的原因:  FreeLibrary 时,未正确清理内部的计时器,造成 FreeLibrary 后,内部的计时器到指定的时间点后仍然运行,结果就出现了 AV 错误。  GDI+ 初始化和清理只能在宿主程序中执行

[QPlugins] DLL 中插件提供窗口服务指南

QPlugins 为了简化大家开发带有窗体的插件,提供了 IQFormService 接口的封装实现。要使用该接口,需要按以下步骤执行: 【宿主程序】 1、如果宿主程序是 VCL 程序,在某个模块的 uses 小节,加入 qplugins.vcl.messages 单元,以便引入对 Windows 消息的扩展支持服务;

[技巧] 解决 Windows 8 / 10 无法通过 Screen 的 Imes 正确获取当前安装的输入法列表的问题

【问题原因】 该问题是由于微软从 Windows 8  开始,GetKeyboadLayouts 函数不再有效,而 VCL 中仍然是通过该方法获取输入法列表造成的。希望下个版本的 Delphi/C++ Builder 能够解决。 【解决办法】 如果是 Win8+,则自己从注册表读,如果是Win 7 等以前的版本,则直接

在代码中检查当前是否是 FireMonkey(FMX)程序

截止到 XE7 Update 1,Delphi 并没有提供一个条件编译选项来告诉当前程序是否是 FMX 平台的程序,而我们在做跨平台的应用时,许多时候需要知道这一点,那么我们该怎么办?QDAC 3.0 的 QString 单元提供了一个全局变量 IsFMXApp 来帮助用户检测这一点,它实际上是在初始化时,通过检查是否

在VCL中显示一个非激活状态的窗口

在VCL中,调用窗体的TForm.Show时,窗口被自动激活到前台,从而令前面的窗口失去了焦点。有的时候,这并不是我们需要的效果,我们可能只是显示一个比较复杂的提示窗口,这个窗口默认并不需要获取焦点,而VCL并没有提供这样一个函数。 今天在群里话询问时,以前一直没有想明白怎么搞定TForm的Visible属性,不得闲给