一查路径:查看程序的搜索和库文件路径中是否有重名的文件,如果资源在这些重名的文件中,链接时如果错误链接到了老版本,就有可能造成此问题。 二看定义:在 Delphi 中,如果 DFM 定义和 Pas 对应的文件不完全匹配(比如界面上有的控件,但 pas 中由于某些原因被删除了),编译时并不会提示什么问题,但实际链接到程序
分类: 教程
[教程]判断两个不同的接口实例是否是同一个对象
如果一个对象支持多个接口,当我们获取其支持的不同接口的实例时,就会得到不同的地址,比如: type IA=interface [‘{CB36F22E-E44C-4842-8198-7487806A3617}’] … end; IB=interface [‘{06949AE4-97F9-48C9-9E47-21E29
[教程]为 Delphi 剪贴板加入 CF_HTML 数据支持
嗯,直接上代码,需要引用 QDAC 的 QString 单元,不支持太老版本的 Delphi,使用古董版的 Delphi 的请自己改写下: uses clipbrd, qstring; type THTMLClipboardFormatData = class helper for TClipboard privat
[日积月累]-20180622:前向声明关键字 forward
【格式】 函数声明;forward; 【用途】 forward 关键字用于前向声明一个局部函数,比如: function Calculate(X, Y: Integer): Real; forward; 声明了一个 Calculate 函数,那么后面必需重新声明并实现这个函数,类似于下面: function Calcu
[日积月累]-20180621:[Warning] W1000 Symbol ‘%1’ is deprecated: ‘Use %2’
【译】 [警告] W1000 符号 ‘%1′ 已经被废弃:’请使用 %2’ 【问题原因】 当前版的 Delphi 已经不再使用名为 %1 的函数/变量/常量,目前的代码仍可以正常运行,但最好改成使用 %2 的替代函数/变量/常量。官方的意思是相应的符号将在后续的某个版本中
[教程]DateTimeFromString 函数的使用说明
DateTimeFromString 用于将一个日期时间格式的字符串表达式转换为日期时间类型,用于替代 Delphi 自己的 StrToDate 函数(弱弱的一个函数,我一直忽略它的存在)。 在绝大部分场景下,DateTimeFromString 可以正确识别多咱格式的日期时间字符串,但并不代表它的自动识别智能到可以理
[QString]FindSwitchValue 函数使用说明
【用途】 此函数用于将命令行开关分隔为一个名称-值对,并取出其中值。 【声明】 function FindSwitchValue(ASwitch: QStringW; ANameValueSperator: QCharW; AIgnoreCase: Boolean; var ASwitchChar: QCharW):
[教程] Delphi 中的自动引用计数使用规则
Delphi 用户应该早已经熟悉自动引用计数的概念(ARC),Delphi 很早就开始支持接口、动态数组和字符串的自动引用计数(DCC32、DCC64、DCCOSX),移动编译器则加入对类的自动引用计数支持,因此还加了入弱引用的概念,以管理循环引用。有个预编译条件指令 AUTOREFCOUNT 可以检测当前是否编译器
[FMX] FMX 动画类的一个辅助增强
本增强的目的是解决动画对象只支持 published 的有效的几种属性的问题,确切的说,这是一个适配器,通过匿名函数建立与非 published 属性的适配。我在 [FMX] Delphi 中 TAnimation 设计的几点值得商榷的地方 一文中讨论了 FMX 动画支持类的一些值得商榷的地方和改动,而这个增强从另一个
[教程]为 TDateTimePicker 增加日期时间类型支持(来自LakeView)
1、找到 VCL.ComCtrls.pas 单元 2、修改 TDateTimeKind 类型,增加 dtkDateTime,以便支持日期时间类型。 TDateTimeKind = (dtkDate, dtkTime, dtkDateTime); 3、找到 TDateTimePicker.CNNotify 函数,在 D
[教程]以管理员身份运行程序的一种方法
以管理员运行程序的方法有很多种,包含在 manifest 文件中请求权限,兼容性设置及下面说的 runas。 runas 算是一种比较另类的方法,它是通过重新启动程序以管理员方式运行的方式来让新的进程以管理员方式运行,然后退出当前进程,以达到以管理员身份运行的目的。 要执行这个操作实际上很简单,用众所周知的 Shell
[非官方补丁]RSP-19552 10.2.2 的 Android 程序在退出时出错的问题非官方补丁
访问官方QC地址 问题原因:该问题是由于程序退出时,FSharedContext 被释放,而 DoFinalizeShader 调用 Valid 没有做相应的处理,结果在检查到 FSharedContext 为空时,又重新创建了 FSharedContext 造成的。 解决办法:在 Valid ->Activat
[FMX] FMX 拖放支持的一处小问题修正
FMX 的拖放支持实际上要比 VCL 方便一些,控件的 OnDragOver 事件的 Operation 代替了 VCL 中只能简单的 Accept。但就 10.2 版本而言,其拖放操作在 Windows 下对 DragDrop 的调用存在问题,没有调用 TControl.DragDrop 函数,造成拖放后,目标的 I
[QSecurity]QSecurity 使用入门指南
QSecurity 是 QPlugins 的安全相关插件接口及其实现, qplugins_security.pas 定义了安全相关的接口,我们在插件中使用时,只需要引用这个接口文件就可以了。而服务的实现单元并不包含在免费开源的范围内,如果您不想自己实现,或者想参考实现,需要付费购买,价格为人民币 99.00 元。 无论
[教程]解析 Web 颜色(VCL)
这段代码支持的Web颜色格式为 #RRGGBB/#RGB 以及以Web标准名称命名的颜色(需要引用单元:qstring,graphutil): function ParseWebColor(S: String;ADefColor:TColor=clBlack): TColor; var p: PChar; c: arr
[FMX]在 FMX 程序中绘制单像素宽度的直线
在前面的一篇文章中,我介绍了一种绘制低品质直线的方法,但是这么做,效率上肯定要打折扣的。在和群里的朋友们一顿交流折腾后,对于绘制水平或垂直的直线,现在有两种更简单的办法来解决这一问题: 办法一:使用 FillRect 来代替 DrawLine 绘制,矩形区域的大小注意要在相应的方向上加 0.5 个像素。 Canvas.
[FMX]在程序中使用已有的样式做自己需要的渲染
今天我们来做一件坏事,我们都是坏孩子…… 我们知道,FMX 是有 StyleBook,每个控件有自己的样式,但有时候,我们要绘制自绘一些状态,难道非要用户重新定义一堆样式吗?为啥不能利用现成的样式呢,比如,我就只是要自绘一个CheckBox,但我还不想放置一个TCheckBox组件,那么怎么来做呢? 第一:我们需要知道
【教程】在你的程序中使用自定义字体
【Android】 方法一:参考 [译]在 Andriod/IOS 程序中使用自己的字体 自己修改系统源码,缺点是每升级一个版本需要修改一次; 方法二:使用 QDAC 为此新增 qdac_fmx_fontex_android ,不过区分免费版和赞助版(赞助版为qdac_appfonts,同时支持所有平台),但使用步骤一
[教程]在你的程序中使用 FontAwesome 字体
首先是无论什么平台,要使用 FontAwesome 字体需要两步: 第一步:添加字体,考虑到字体如果是专用的话,应该是当前程序能够加载字体的目录(下面都假设这一点,你如果装到操作系统字体目录里的话,就直接使用就可以了); 第二步:设置控件的字体为 FontAwesome,然后调整字体大小和样式为合适的大小; 【Wind
[QMacros] 使用迭代器来重复内容
QMacros 2017年9月18日提交的版本支持了迭代器,以重复替换某一部分内容。 迭代器的声明: IQMacroIterator = interface [‘{3DB5D84F-0539-4C10-9476-E6B71D3099DE}’] // 开始替换 procedure BeginReplace(AMacro: