【译】 [警告] W1000 符号 ‘%1′ 已经被废弃:’请使用 %2’ 【问题原因】 当前版的 Delphi 已经不再使用名为 %1 的函数/变量/常量,目前的代码仍可以正常运行,但最好改成使用 %2 的替代函数/变量/常量。官方的意思是相应的符号将在后续的某个版本中
分类:教程
[教程]DateTimeFromString 函数的使用说明
DateTimeFromString 用于将一个日期时间格式的字符串表达式转换为日期时间类型,用于替代 Delphi 自己的 StrToDate 函数(弱弱的一个函数,我一直忽略它的存在)。 在绝大部分场景下,DateTimeFromString 可以正确识别多咱格式的日期时间字符串,但并不代表它的自动识别智能到可以理
[QString]FindSwitchValue 函数使用说明
【用途】 此函数用于将命令行开关分隔为一个名称-值对,并取出其中值。 【声明】
1 2 3 4 |
function FindSwitchValue(ASwitch: QStringW; ANameValueSperator: QCharW; AIgnoreCase: Boolean; var ASwitchChar: QCharW): QStringW; overload; function FindSwitchValue(ASwitch: QStringW; ANameValueSperator: QCharW = ':') : QStringW;overload; |
【参数说明】 ASwitch : 要查找的开关 ANameValueSperator : 开关和名称的值的分隔符 AIgnoreCase : 是否忽略大小写 ASwitchC
[教程] 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):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
function ParseWebColor(S: String;ADefColor:TColor=clBlack): TColor; var p: PChar; c: array [0 .. 3] of Byte absolute Result; i: Integer; begin Result := 0; p := PChar(S); i := 0; if p^ in ['a' .. 'z', 'A' .. 'Z'] then begin if IdentToColor('cl' + S, i) then Result := i else begin S := 'clWeb' + S; for I := 0 to High(WebNamedColors) do begin if CompareText(WebNamedColors[I].Name, S) = 0 then begin Result := WebNamedColors[I].Value; Exit; end; end; Result := ADefColor; end; Exit; end else if p^ = '#' then begin Inc(p); if Length(S) = 4 then // #RGB begin while p^ <> #0 do begin if IsHexChar(p^) then begin c[i] := (HexValue(p^) * 255) div 15; Inc(i); Inc(p); end else break; end; end else if Length(S) = 7 then begin while p^ <> #0 do begin if IsHexChar(p^) then begin c[i] := HexValue(p^); Inc(p); if p^ <> #0 then begin c[i] := (c[i] shl 4) + HexValue(p^); Inc(p); end; Inc(i); end else break; end; end; end; if i <> 3 then Result := ADefColor; end; |
比如#FF0000 和 #F00 都被解释为红色。
[FMX]在 FMX 程序中绘制单像素宽度的直线
在前面的一篇文章中,我介绍了一种绘制低品质直线的方法,但是这么做,效率上肯定要打折扣的。在和群里的朋友们一顿交流折腾后,对于绘制水平或垂直的直线,现在有两种更简单的办法来解决这一问题: 办法一:使用 FillRect 来代替 DrawLine 绘制,矩形区域的大小注意要在相应的方向上加 0.5 个像素。 [crayon
[FMX]在程序中使用已有的样式做自己需要的渲染
今天我们来做一件坏事,我们都是坏孩子…… 我们知道,FMX 是有 StyleBook,每个控件有自己的样式,但有时候,我们要绘制自绘一些状态,难道非要用户重新定义一堆样式吗?为啥不能利用现成的样式呢,比如,我就只是要自绘一个CheckBox,但我还不想放置一个TCheckBox组件,那么怎么来做呢? 第一:我们需要知道
【教程】在你的程序中使用自定义字体
【Android】 方法一:参考 [译]在 Andriod/IOS 程序中使用自己的字体 自己修改系统源码,缺点是每升级一个版本需要修改一次; 方法二:使用 QDAC 为此新增 qdac_fmx_fontex_android ,不过区分免费版和赞助版(赞助版为qdac_appfonts,同时支持所有平台),但使用步骤一
[教程]在你的程序中使用 FontAwesome 字体
首先是无论什么平台,要使用 FontAwesome 字体需要两步: 第一步:添加字体,考虑到字体如果是专用的话,应该是当前程序能够加载字体的目录(下面都假设这一点,你如果装到操作系统字体目录里的话,就直接使用就可以了); 第二步:设置控件的字体为 FontAwesome,然后调整字体大小和样式为合适的大小; 【Wind
[QMacros] 使用迭代器来重复内容
QMacros 2017年9月18日提交的版本支持了迭代器,以重复替换某一部分内容。 迭代器的声明:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
IQMacroIterator = interface ['{3DB5D84F-0539-4C10-9476-E6B71D3099DE}'] // 开始替换 procedure BeginReplace(AMacro: TQMacroItem); // 判断是否还有要处理的数据 function HasNext: Boolean; // 执行一次替换 function Replace: QStringW; // 结束替换 procedure EndReplace; // 获取当前活动的迭代器序号 function GetItemIndex: Integer; end; |
好吧,这是一个接口,这就意味着,我们绑定某个宏到这个迭代器之前,需要先实现一个迭代器。我们可以继承自 TQMacroIterator 实现一个自带的迭代
[教程]通过 PnP 获取显示器信息示例
在一些场合,我们需要获取显示器的硬件信息,来便做一些便宜的处理(那当然具体的处理就不需要我说道了),下面的代码提供了一种实现,供有需要的朋友参考: 下载:MonitorEDID 效果: 当然了,如果你没有想到用它来干啥,说明你根本就用不到它,当然也就不用管它了,全当看了一个笑话。
[教程]导出函数不是动态链接库或共享对象的专利,可执行文件也可以导出,所以两者是可以相互调用的
这个教程没有更多内容,只是一句提示,懂得自然懂,不懂的慢慢想。
[教程]调用 TBrowseForFolder 的正确姿势
TBrowseForFolder 是 Delphi / C++ Builder 中自带的一个浏览目录的对话框,位于 StdActns 单元(后期为 Vcl.StdActns 单元),不幸的是,这个动作代码天生残疾(从诞生到现在一直没改过这个问题),要让其好用,有两种解决办法: 第一种:刮骨疗毒=>修改 StdAc
[教程]Delphi下的移动教程之二:读懂第三方 Java/Objective-C 接口
教程以 Delphi 录制,但由于 Delphi 和 C++ Builder 使用同一 IDE,所以绝大部分内容同样适用于 C++ Builder。 【价格】 以人民币计价: 个人用户:50元 企业用户:300元 【视频长度】 待定 【视频语言】 中文,普通话 【视频编码】 格式:H.264 MP4 分辨率:1920×