[教程]一个共享的计时器类封装

QDAC 4.0 中已经包含了此单元,名称改为qdac.timer.share,使用 TQShareTimer 来做相关处理。 这个是一个精度为秒的共享定时器实现,可以秒为单位创建多个共享的定时器,这些定时器的回调的维护和回调都要求在主线程中执行。 这个代码真正想给大家说的是 GetCallbackOwner 函数中,

[教程]TToolBar.TToolButton 不同按钮下拉菜单使用同一个TPopupMenu

我只是不想放那么多 TPopupMenu ,可能别人早知道,可以略过不看。 1、按钮设置样式为 tbsDropDown。 2、放一个 TPopupMenu,添加一级菜单和子菜单,二级子菜单才是我们要呈现的内容。如果要显示图标,就让 TPopupMenu 和 TToolBar 关联到同一个 TImageList,然后设置

[教程] ZValueWatch 教程之二:在线程中处理图片

前面的教程中,我们演示了一个进度更新和位置调整的示例,接下来我们演示如何创建一个特定类型的监视对象来动态更新一个特殊类型的属性。 1、在界面上放置需要的组件,我们要在线程中动态更新图像内容,然后在前台显示(本示例依赖于 Graphics32)。 2、设置 ZWatcher的Kind为wkMessage或 wkTimer

[教程]FMX中实现图片素材形状剪裁

这个东西,如果不知道方法,还是很难办的。知道方法就很容易了。 1、我们放一个TCircle,当然其它的也随意。 2、修改 Fill 的三个属性:Bitmap 指向要被剪裁的图片, WrapMode 选择 TileStretch(请保持图片尺寸比例和当前圆形的尺寸一致,否则可能变形),Kind 改为 Bitmap 设置完

[教程]VirtualTreeView 组件中,释放时可能造成假死问题修复

在 TBaseVirtualTree.Destroy 函数里,有一段代码是这么写的: 注意这个 while 循环,因为它调用的 CheckSynchronize 去检查后台线程是不是异步调用了自己,但它没有考虑如果有其它线程或者同步代码在频繁 TThread.Synchronize 或 TThread.Queue/TT

[FMX]教程:运行时动态修改 FMX 样式

简单说几个点: 1、FMX 框架下,样式是通过名称来标志的。 2、GetStyleObject 默认是克隆原始的样式,所以直接修改对象自身的 FResourceLink 实例,不会影响其它样式,如果要修改全部同一类型控件的样式,手动调用控件的 GetStyleObject(false) 来获取样式的原始实例即可,进行调

[流控] ZFlowControler 设计基本思想说明

首先,说一下支持的流控种类: 基于时间分片的流控,限制每分钟允许发生多少次调用。这种情况下的流控,对一段时间内的速度控制,一般分成两种: 均一化流控:将速度均匀分布,比如说我们限制某个访问为每分钟1200次,那么程序控制粒度就是在每50ms,允许调用一次。 爆发式流控:同样是上面的要求,爆发式的流控会拿出一部分限额,尽

[教程]本用 System.Zip 从流中获取解压数据

【前言】 写这个教程的原因,是因为要实现下面的场景: 1、通过 THttpClient 从网络上下载压缩包到内存流中。 2、将内存流中的 ZIP 格式压缩数据中的特定扩展名文件,在内存中直接解压处理,而不是解压到磁盘,再加载。 【实现流程】 1、下载压缩包到内存流中,这个本身直接通过 THttpClient.Get 或

[教程] Delphi 自带异步模型详解

Delphi 在新版中引入了一个新的异步编程模型,一个新的接口 IAsyncResult 被包含在 System.Types 里。我们先来大概说下 Delphi 自己这个异步编程模型的思路: 1、异步编程的函数名,官方是以 BeginXXX打头,比如 BeginReceive、BeginWrite 等等 ,它们负责开始

[转]ESXi找回并重新挂载丢失的数据存储

文章来源:在下天锦 是在一张1TB的硬盘上安装了ESXi系统,并且默认建立了一个VMFS6的数据存储datastore1。开学后从家带到学校换到了另一台物理机上面,发现网络出现故障,Ping不通主机,随即尝试重置管理网络,不料将整个系统重置……网络是恢复了,能够进到Web Client,但是发现系统中的数据存储全部丢失

[教程]程序保存数据的防断电处理策略

虽然现代社会,电力供应没有那么紧张,但每年因为线路或计划检修等原因,正常和非断电的情况还是有的。另外,室内电源接触不良,掉落等因素也会出现异常断电的情况。如果在此时,恰好数据写入一半,就可能造成程序数据写入异常,下次程序启动时,如果调用这种数据就可能出现某些非预期的错误。 实际上解决这类问题,有一个简单的策略: 1、将

[付费]数据集内容输出 JSON 格式数据

嗯,这是一个试验性的收费产品,它是做为 TQJsonOutputChannel 的附属品存在的,信赖于 qjson_output_channel 单元,提供数据集转换为 JSON 数据内容的格式化输出支持。收费标准定为 200 元,含源码、示例和用法一对一指导。 【使用方法】 一如既往的简单,直接引用 qjson_da