一步一步学习使用LiveBindings(2) 使用LiveBinding Designer进行控件到控件的绑定
本课学习一个组件的属性间的绑定的例子,这个例子使用了几个非常有趣的FireMonkey控件。
1. 单击主菜单中的 File > New > Multi-Device Application - Delphi > Blank Application ,创建一个新的多设备应用程序。
建议立即单击工具栏上的Save All按钮,将单元文件保存为uMainForm.pas,将项目保存为LiveBinding_ControlToCo ...
一步一步学习使用LiveBindings(1) 使用向导无代码创建基于绑定的FireMonkey应用程序
这将是一个系列的文章,主要通过实际操作的模式一步一步来揭开LiveBindings的面纱。
在VCL框架中,传统的数据绑定模式是这样的:用 TDataSource 组件连接数据集和数据显示控件。数据显示控件(一般以TDB开头的控件)能自动同步数据变化,能处理用户操作,使得数据修改和更新更简单而且直观。
在FireMonkey中,传统的数据绑 ...
Delphi 中禁止 TStringGrid 单元格被选中
Delphi 中禁止 TStringGrid 单元格被选中
环境
Windows 11 23H2
Delphi 12 Update 1
FXM 框架
使用 Delphi 中 FMX 框架的 TStringGrid 展示数据而不愿意某个单元格被选中时,OnSelectCell 事件提供了很简单的方法实现了这一目的。
procedure TFrom.StrGrdSelectCell(Sender: TObject; const ACol, ARow: Integer; var C ...
mormot.core.threads--TSynThreadPool
mormot.core.threads--TSynThreadPool
{ ************ 面向服务器进程的线程池 }
TSynThreadPool = class; // 前向声明TSynThreadPool类
/// 定义了TSynThreadPool所使用的工作线程
TSynThreadPoolWorkThread = class(TSynThread)
protected
fOwner: TSynThreadPool; // 线程池所有者
fThreadNumber: integer; ...
mormot.core.os--TSynLocker和TSynLocked
mormot.core.os--TSynLocker和TSynLocked
TLightLock
{ **************** TSynLocker/TSynLocked 和 低级线程特性 }
type
/// 一个轻量级的独占非重入锁,存储在 PtrUInt 值中
// - 在自旋一段时间后调用 SwitchToThread,但不使用任何读写操作系统API
// - 警告:方法是非重入的,即在一个裸调用中两次调用 Lock 会 ...
mormot.core.threads--TSynParallelProcess
mormot.core.threads--TSynParallelProcess
{ ************ 线程池中的并行执行 }
type
/// TSynParallelProcess 的并行化过程回调
// - 如果 0<=IndexStart<=IndexStop,则应执行某些过程
TOnSynParallelProcess = procedure(IndexStart, IndexStop: integer) of object;
/// 为 TSynParallelProcess 执行过程的 ...
mormot.core.threads--TSynBackgroundThread
mormot.core.threads--TSynBackgroundThread
在mORMot 2框架中,TSynBackgroundThreadEvent、TSynBackgroundThreadMethod、TSynBackgroundThreadProcedure、TSynBackgroundThreadProcess和 TSynBackgroundTimer这几个类虽然都涉及到后台线程的执行,但它们各自有不同的用途和设计目标。以下是对这些类之间差异的概述:
TS ...
mormot.core.threads--TBlockingProcess
mormot.core.threads--TBlockingProcess
type
/// TBlockingProcess 实例的当前状态
TBlockingEvent = (
evNone, // 无状态
evWaiting, // 等待状态
evTimeOut, // 超时状态
evRaised); // 触发状态
{$M+} // 开启RTTI详细信息模式,用于调试
/// 用于等待某个进程完成的信号量 ...
mormot.core.threads--TSynQueue
mormot.core.threads--TSynQueue
以下是对 mormot.core.threads中部分代码的翻译,特别是关于 TSynQueue类的部分:
const
// 在这里定义以避免在uses子句中显式链接到syncobjs单元
wrSignaled = syncobjs.wrSignaled; // 等待结果:已发出信号
wrTimeout = syncobjs.wrTimeout; // 等待结果:超时
wrError = s ...
mORMot虚拟数据集--TOrmTableDataSet
如何快速显示 OrmTable--可以使用TOrmTableDataSet
这是mormot.db.rad.ui.orm的主要功能
type
/// 只读虚拟TDataSet,能够访问TOrmTable
TOrmTableDataSet = class(TVirtualDataSet)
protected
fTable: TOrmTable; // 关联的TOrmTable实例
{$ifndef UNICODE} // 如果不是在Unicode版本的Delphi中
fForc ...
mORMot模糊概念--FormatSQL-第1部分
mORMot里面的模糊概念--FormatSQL第1部分
mORMot 的 Fast Format 到底是% 还是 ? 作为参数!,先看看关键代码。
下面是代码原始注释
function FormatSql(const Format: RawUtf8; const Args, Params: array of const): RawUtf8;
fast Format() function replacement, handling % but also ? inlined parameters
will in ...
mormot.core.threads.pas unit
mormot.core.threads.pas unit 中文翻译
Purpose: Framework Core Multi-Threading Support
- this unit is a part of the Open Source Synopse mORMot framework 2, licensed under a MPL/GPL/LGPL three license - see LICENSE.md
目的:框架核心多线程支持
本单元是开源Synopse mORMot框架2的一部分,根据MPL/GPL/LGPL ...
mORMot and Open Source friends SynProject Tutorial (SynProject教程)
mORMot and Open Source friends SynProject Tutorial--(SynProject 教程)
第一步
本页介绍SynProject的一些典型用法。
我们将为mORMot框架本身创建一个源代码存储库和相关的文档。
您要求文档,我们将通过SynProject自动生成它!
我们需要什么
因此,我们在硬盘上的D:\Dev\Lib文件夹中拥有所有mORMot框架源代码文件(主单 ...
SynProject 介绍---(synopse理解的版本控制和文档自动化生成)
SynProject 介绍---(synopse理解的版本控制和文档自动化生成)
Synopse SynProject是一个用于Delphi项目的源代码版本控制和自动化文档生成的开源应用程序。它在GPL许可下发布。
有关其全部功能的完整列表,请参阅SynProject功能。
源代码可从本源代码存储库获取。请选择上方的“文件”按钮,并查看SynProject文件夹。
另 ...
Modern Pascal is Still in the Race (Modern Pascal 仍在竞赛中)
Modern Pascal 仍在竞赛中
作者:Arnaud Bouchez,2022年11月26日。永久链接
Pascal 编程
博客
集合
跨平台
数据库
Delphi
FPC
垃圾回收器
泛型
Go
优秀实践
元编程
mORMot
mORMot2
性能
RTTI
Rust
最近在Lazarus/FPC 论坛上的一项民意调查突显了一个事实:Pascal 程序员比其他大多数程序员年龄都大。通常来说,到了我们 ...
Safe locks for multi-thread applications(多线程应用程序的安全锁)
Safe locks for multi-thread applications(多线程应用程序的安全锁)
由AB4327-GANDI,2016年1月9日。永久链接
开源 › mORMot框架
博客
临界区
Delphi
良好实践
mORMot
多线程
一旦你的应用程序是多线程的,就应该保护并发数据访问。我们已经写过关于调试多线程应用程序可能很困难的文章。
否则,可能会出现“竞态条件 ...
Three Locks To Rule Them All(三把锁统治一切)
Three Locks To Rule Them All(三把锁统治一切)
【英文原文】
为了确保线程安全,特别是在服务器端,我们通常使用临界区(critical sections)或锁(locks)来保护代码。在最近的Delphi版本中,我们引入了TMonitor特性,但我更倾向于信任操作系统提供的锁机制,这些锁是通过Windows临界区或POSIX futex/mutex来实现的。
...
End Of Live OpenSSL 1.1 vs Slow OpenSSL 3.0
End Of Live OpenSSL 1.1 vs Slow OpenSSL 3.0
【英文原文】
你可能已经注意到,OpenSSL 1.1.1 系列将于下周一(2024 年 5 月 27 日)达到寿命终止(EOL)……
最明智的选择是尽快切换到 3.0 或 3.1 版本。
当然,我们的 mORMot 2 OpenSSL 单元在 1.1 和 3.x 分支上运行,并在运行时自适应每个分支之间存在的各种 API 不兼 ...
IDocList/IDocDict JSON for Delphi and FPC
IDocList/IDocDict JSON for Delphi and FPC
【英文原文】
多年来,我们的开源 mORMot 框架提供了多种方法来处理在运行时定义的数组/对象文档的任意组合,例如通过 JSON,具有许多功能和非常高的性能。
我们的 TDocVariant自定义变体类型是处理这类无模式数据的一种强大方式,但一些用户觉得它有些令人困惑。
因此,我们围 ...
Quick Library 简介
QuickLib 是一个快速开发库
QuickLib是一个快速开发库,它提供了诸如AutoMapper、LinQ、IOC依赖注入、MemoryCache、计划任务、Json和Yml配置、序列化程序等多种功能。这个库特别支持Delphi和Firemonkey的多平台开发,包括Windows、Linux、Android、OSX和IOS。同时,QuickLib也支持freepascal,使得开发人员能够更轻松地构建 ...