QDAC 项目从 2012 年开始,已经开发了超过 10 年的时间了,前一段时间转入纯维护阶段,不再增加新的功能,主要以修复 Bug 为主和修改兼容问题。 一路陪伴,不负期许,随着国内外大环境的变化,我们也在纠结中,决定和大家一起继续 QDAC 之路,由此诞生了 QDAC 下一个版本的发展和规划。 新的版本,将不再在我
[专题] Delphi / QDAC 付费视频教程专区
本专区的内容视频是作者或群友原创,需要付费购买,会根据大家的需要录制和推出。 【购买方式】 申请加入 QDAC 视频付费教程群 :201867767; 找到下面视频的价格,然后通过以下方式付费: [支付宝] guansonghuan@sina.com 姓名:管耸寰(请标明QQ号) [QQ] 直接群支付,或给群主发红包
QDAC项目简介
QDAC 是由吉林省左右软件开发有限公司为大家提供的一套 Delphi/C++ Builder 跨平台开源组件库,名称取自英文 Quick Data Access Components 的首字母。它支持 Delphi/C++ Builder 2007 以上的版本的开发环境,目标是为大家提供一套高效稳定的跨平台快速数据访
[教程]PVE 8.2 安装 Windows 7 时,QEmu Guest Agent 安装失败处理
这个问题是由于 qemu-ga.exe 的兼容问题引起的,尝试了网络上很多教程都没有搞定。最终以下面的方法安装成功: 【注意】
【教程】Linux 下蓝牙丢失的处理
执行下面的两条命令
[教程]使用 QJson 解析 JsonL 格式数据
QJson 在早期设计时就支持块解析,JsonL 只是一种特殊的 Json 块,我们可以直接使用其中的 ParseBlock 函数来完成对 JsonL 的支持。 ParseBlock 提供两种重载,如果是一个内存的 JsonL 格式的数据,那么我们可以直接用下面的代码: 如果是一个流对象,则类似上面循环,只不过改成下面
[教程]一个共享的计时器类封装
QDAC 4.0 中已经包含了此单元,名称改为qdac.timer.share,使用 TQShareTimer 来做相关处理。 这个是一个精度为秒的共享定时器实现,可以秒为单位创建多个共享的定时器,这些定时器的回调的维护和回调都要求在主线程中执行。 这个代码真正想给大家说的是 GetCallbackOwner 函数中,
[教程]Delphi 泛型中数据内容比较
第一:你需要引入 System.Generics.Defaults 单元,系统默认实现的比较方法,都在该单元定义。 第二:你要明确下你的需求,是只比较相等就可以,还是要比较大小。 第三:确定是否要自己实现比较函数还是使用默认的比较函数,如果使用默认的比较函数: 如果要实现自己的比较函数,则可以使用预置的封装加一个匿名函
[教程]Linux 实时查看各个CPU频率
在终端执行下面的代码: 运行效果: 前面可以再加一个序号,看起来更好看一点: 输出结果:
[公告]Delphi 12.1 来了
官方 ISO 下载 在线安装下载 更新说明暂时官方未公布。 如果是使用在线安装版本,Windows 7 或 Windows Server 2008 R2 需要打上最新的补丁,否则无法下载可选安装内容(Window 7/Server 2008 R2 最后的更新日期截止为 2024 年 4 月 26 日,在此之后,其扩展安
[教程]如何在 QJSON 中添加一个 JSON 字符串结点
在一些与其它平台或软件做衔接的时候,因为平台本身某些原因(如JSON解析工具不支持或者用 ORM搞的),我们有时候需要传一个成员为JSON字符串的东西给对方,例如: 上面这个 JSON ,我们用 QJSON 编码方式如下: 反过来,如果我们要解析,则可以直接用下面的代码: 上面用的 Delphi 的新语法,早期版本将变
[教程]如何保证对象释放时,异步调用过程都已经完成
[基本原理] 我们使用一个引用计数可以很简单的完成这一需求。 [实现细节] [进一步的实现] 上面的实现简单可靠,唯一的问题,就是对象释放必需等待异步操作完成。这个时间点是不可靠的,要更好的实现可以将异步调用进行额外的处理,并将其与对象的生命周期进行拦截。
[教程] Delphi 12 Winapi.EdgeUtils.CheckWebview2Loaded 函数的一处错误处理
Winapi.EdgeUtils.pas 的第 161 行: @_GetCoreWebView2BrowserVersionString := GetProcAddress(hWebView2, ‘GetCoreWebView2BrowserVersionString’); 应修改为: webview2Loader.d
[教程]TToolBar.TToolButton 不同按钮下拉菜单使用同一个TPopupMenu
我只是不想放那么多 TPopupMenu ,可能别人早知道,可以略过不看。 1、按钮设置样式为 tbsDropDown。 2、放一个 TPopupMenu,添加一级菜单和子菜单,二级子菜单才是我们要呈现的内容。如果要显示图标,就让 TPopupMenu 和 TToolBar 关联到同一个 TImageList,然后设置
[教程]自绘开关组件效果
直接用PaintBox绘制的例子,同样的效果内置于 TZTextButtonBar 中,设置对应的按钮的 ButtonKind 为 bkSwitch 并且 ThemeDraw 为 False 时,即可。 实际运行效果动图
[ZBar]ZBar 泛型库目录
[单元名] zbar.generics [组件包] zbar.rtl [组件包价格] ¥99.00 元 [单元功能] 基于泛型实现的开源容器和基础算法 [类] TZSimpleObject<T> : 仅包含一个数据成员( Value )的简单类实现 TZSimpleInterface<T> : 仅包含一个数
[教程] ZValueWatch 教程之二:在线程中处理图片
前面的教程中,我们演示了一个进度更新和位置调整的示例,接下来我们演示如何创建一个特定类型的监视对象来动态更新一个特殊类型的属性。 1、在界面上放置需要的组件,我们要在线程中动态更新图像内容,然后在前台显示(本示例依赖于 Graphics32)。 2、设置 ZWatcher的Kind为wkMessage或 wkTimer
密码保护:[教程]使用 Curl 发送电子邮件VBS脚本
无法提供摘要。这是一篇受保护的文章。
[教程] ZValueWatch 教程之一:在主线程中监测值变化
Z 系列又加入了新的成员:ZValueWatch,它被实现用来异步监测一个值的变化。 IZValueWatch 通过将赋值和变更通知进行了异步化,这样子,在值频繁变化的场景,可以有效的减少变更通知的次数,从而提升程序的运行效率。 我们假设一个典型的应用场景:我们在后台线程中要执行长时间的操作,并且及时更新前台的进度显示
[教程]FMX中实现图片素材形状剪裁
这个东西,如果不知道方法,还是很难办的。知道方法就很容易了。 1、我们放一个TCircle,当然其它的也随意。 2、修改 Fill 的三个属性:Bitmap 指向要被剪裁的图片, WrapMode 选择 TileStretch(请保持图片尺寸比例和当前圆形的尺寸一致,否则可能变形),Kind 改为 Bitmap 设置完
[教程]VirtualTreeView 组件中,释放时可能造成假死问题修复
在 TBaseVirtualTree.Destroy 函数里,有一段代码是这么写的: 注意这个 while 循环,因为它调用的 CheckSynchronize 去检查后台线程是不是异步调用了自己,但它没有考虑如果有其它线程或者同步代码在频繁 TThread.Synchronize 或 TThread.Queue/TT
[教程]高效处理在主线程中显示后台线程处理进度
先看经典的处理方法: 我们需要更新进度时,将其切换到主线程,并更新进度显示。我们测试显示用了32735ms,也就是说100万次进度更新,用了约33秒。 接下来我们来看下优化后的代码: 对的,你没看错,我们将 FProgress.Update 直接在后台线程调用了。我们对其代码进行了逻辑隔离,实测 100 万次进度更新,
[教程] Delphi Android aab 转换为 apk 工具
这个工具是基于官方的 bundle-tool 工具,然后通过批处理方式脚本实现。 1、下载工具文件。 2、解压到你工程文件目录下 3、用记事本打开 android64.bat ,然后设置 FileName 等参数的值 4、将你的 Android 程序发布为 Android64 -> Application Store