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

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

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

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

[译]RAD Studio 11 更新说明

原文链接:官方文档 官方ISO下载 Bug修复列表 注:本文为简译 IDE 高DPI支持 IDE 所有窗口都支持高 DPI 了,解决了高 DPI 缩放造成的模糊问题,有高分显示器,而且使用高 DPI 的开发者值得一试 VCL 窗口设计器支持定制 DPI(自动/96/自定义)缩放,FMX 本来就支持高 DPI 缩放 Op

【教程】对 TEvent 的一处增强

对于 TEvent 来说,如果是调用 WaitFor 等待超时时,如果程序退出时,事件仍在等待状态,就需要等待超时才能退出,造成程序退出时等待很长时间。要改进这一点,我们需要新版的 QWorker,它实现了一个 TAbortableEvent 的记录类型,然后支持取消操作。 TAbortableEvent 的增强在于:

[教程]如果在 Delphi /C++ Builder 中调试单元初始化时的错误

有时候,我们程序在进入 Main 函数入口前,就开始报错,比如 Acesss volation at XXX read at yyyy 一类的错误。这类错误一般是由于单元之间的引用关系和初始化顺序不一致造成的。比如单元 A 的初始化代码调用了单元 B 的函数,但单元 B 此时尚未初始化,所以其使用到的一些全局或静态变量

[分享]一种将 Delphi 组件属性信息保存到JSON的方法

此代码支持 Delphi 2007+,使用 QJSON 做为序列化的支持库。你可以自己改为使用其它的 JSON库(注:此文写法未完善,仅为示意)。 使用示例: 如上面的示例,由于写成了 class helper,所以保存到 Json 里,直接调用组件实例的 SaveToJson 就可以了,而从 Json 中恢复则直接调

[教程]基于 RTTI 创建特定类型的实例

在 Delphi 人群中,有些人总想通过名称,然后动态创建指定类的实例而不得其门而入,不得不将类型先注册,然后再回调解决这个问题。实际上,通过 RTTI 来创建实例是有办法的。下面是基本的步骤: 1、找到类型对应的 TRttiType 信息。这里有几个方法: GetType 方法,这个需要知道目标类型的 TClass/

使用 QDAC 创建 Linux 守护进程

上一篇文章中介绍了如何在 Delphi 中创建 Linux 守护进程,而这篇文章则试图将上文的操作简单化,不要再去考虑那么多事事非非。 【基础入门】 1、引入 qconsole_looper.pas 单元,这个单元本身原来是为了能够在控制台程序中运行主线程函数而引入的,换句话说,引用它后可以保证 QWorker 在控制

在 Delphi 中创建 Linux 守护程序(服务进程)

本文意译自 原文链接,语言上做了精炼和排版的变更,以便更简洁明了。 Delphi 开始支持 Linux 平台为 Delphi 开发人员开辟了创建 Linux 服务器应用程序的可能。但遗憾的是,目前 RAD Studio IDE 并不包括创建 Linux 守护程序()服务)。 【注意】本文假设您已经能够配置好 Linux

使用 ProcessExplorer 查看 Delphi/C++ Builder 的线程调用栈

ProcessExplorer 可以查看运行中进程的各种信息,包括特定线程的堆栈信息。这在我们程序出现死循环或者无响应时等问题时,除了在客户机器上重装一套环境或Remote Debugger 之外(吐槽下 PAServer/RemoteDebugger 在 Windows 下真心不太好用),另外一种在客户机器上能够找到

[QHttpRequest]使用自定义 DNS 来应对 DNS 劫持

为了保证业务的稳定性,避免在由于用户的 DNS 服务器返回错误的 IP 地址,造成程序无法正常运行的情况,QHttpRequest 新增了一个 OnDnsLookup 事件,以便让用户自己处理 DNS 请求。 举个例子:我们要获取 https://blog.qdac.cc 的内容,如果我们指定了 OnDnsLookup

[教程]使用 Delphi 获取当前操作系统的时区

嗯,这段代码实际上已经集成到 QString 单元了,所以你可以直接调用 GetTimezone 函数来获得时区了。用 GetTimezoneText 可以获得时区的字符串表示。 代码不长,用起来也简单,它实际上返回的时区对应的分钟数,比如北京时间是480,也就是 8 小时,其它依次类推。使用 GetTimezonTe

[FMX]为 TControl 增加 DisableAlign 和 EnableAlign 方法

官方没有提供这两个方法,但我们有时候需要调整 FMX 的布局,而这一切都需要修改 FDisableAlign 这个受保护的成员的值,而要修改它的值,在以前的文章中提供了好几种方法,当然最简单的是直接加 class helper。这里我们就采用这一办法。 代码很简单,不需要解释,上面的函数都是返回之前是否允许对齐。要禁止

[QLog]使用 CalcPerf 来查询函数性能瓶径

QLog 最新的变动修改了 CalcPerf 函数的返回值类型,改为返回 IPerfCounter(将来可能改名为 IQPerfCounter ) 接口,与以前的相比,这个接口多了一个名为 MarkEscape 的函数,用于记录两次记录之间的时间间隔,以便进行性能计数。 第一步:声明一个用于统计性能的变量,并为其初始化