首先,我们要知道 QPlugins 的通知机制使用了订阅发布模式。一个通知或叫主题有两个重要的属性: 名称(Name) 名称是通知类型的名字,必需在整个插件系统中保证唯一,同名的被认为是一个类型的通知。当跨进程通信时,是靠名称而不是 ID 来唯一区分通知。 编号(ID) 一个进程唯一的编号(为什么是进程唯一,这个问题好
月度归档: 2015 年 7 月
[QPlugins] 常见问题答问
1、QPlugins 是什么? QPlugins 是一个插件管理引擎,它基于 Delphi 编写,支持各种语言做为宿主和插件。虽然是一个插件引擎,但 QPlugins 更想强调的是服务的概念,而不是插件。插件在 QPlugins 里只是各种服务的容器,各种服务才是 QPlugins 想要整合的主体。QPlugins 的
VCL DLL 中如何解决 Tab 键不好使的问题?
QPlugins 支持 DLL 插件,但是,插件中的窗体如果要嵌入主窗体的某个控件上,往往会发生一些奇怪的事情,百度 Delphi DLL Form 大约可以搜索到 860,000 个结果,大家给出的解决方案千奇百怪。本文提供的解决方法反而可能是最简单的了。 首先声明一下,这个不是最完美的解决方案,QPlugins 里
[公告] QDAC 3.0 源码进行了一次清理,移除掉各个版本的编译提示
最新的源码请 SVN 检出。 下载区的内容也更新到今天的版本,没有 SVN 的用户可以使用它。
[QPlugins] 如何编写基于 QPlugins 的插件程序
QPlugins 插件引擎目前正在开发过程中,目前已经可以编写基于 QPlugins 的插件了。QPlugins 中每个插件提供一到多种服务,这些服务被注册到全局的 PluginsManager 实例中,这个实例在所有的插件中都是可以直接访问的。 PluginsManager 将服务划分为三类: 1、加载器(Loade
QDB、QString、QValue、QPlugins 更新说明
【更新内容】 * 修正了QDB、QPlugins 在 2007 无法编译的问题 + QString 增加 StrCmpW 函数(原有增加新参数并移入 interface 部分) + QValue 修正了Bcd 类型操作符在早期版本未重载而引起的编译问题 * 其它细节修改 【更新级别】 推荐 【特别感谢】 麦子仲肥、勇哥
GIF 动画建立
var Gif:TGifImage; begin //Setting the delay for each frame TGIFGraphicControlExtension.Create(Gif.Add(image1.Picture.Bitmap)).Delay := 300; TGIFGraphicControlE
【Windows】获取函数地址所对应的DLL或EXE地址
下面这个函数可以让你知道一个函数来自那里DLL或者是不是当前可执行文件内部实现的函数,参考代码如下: uses psapi; function GetCodeFileName(Addr: Pointer): QStringW; var AModules: array of THandle; I, ACount: Car
使用 Delphi 的 Rtti 时别忘了为要使用的类型加上 {$M+} 编译选项
测试获取接口的类型信息时,发现没找到相应的函数信息。在前面加上 {$M+} ,在后面加上 {$M-} 就好了。然后类型的 GetMethods 方法就返回了正确的结果。
QString 单元新增 TQBits 实现
TQBits 是用于方便设置标志位的一个实现,它实现对特定位的存取,以节省存贮空间。 TQBits = record private FBits: TBytes; function GetSize: Integer; procedure SetSize(const Value: Integer); function G
[教程] C++ 的程序结构
1、函数 函数是人为的将一段具有某一功能的代码按特定的格式组织在一起,以便在程序的其它地方随时调用的一块代码的实体。在 C/C++ 中,它的格式为: [修饰符] 返回值类型 [修饰符] 函数名([参数列表])[修饰符] { [函数实现] } 初学时,我们暂时先不考虑各种修饰符,只关系核心的部分: 返回值类型:用于给调用
[公告]项目 SVN 服务器更换为 svn://www.qdac.cc ,请大家及时更新
由于 Sourceforge 最近抽风,源码无法检入和检出,终于狠下心将 SVN 迁移到自己的服务器上,新的 SVN 检出地址为: svn://www.qdac.cc/QDAC3 如果提示不是根目录,那直接将 /QDAC3 删除就可以了。 再次感谢大家对 QDAC 项目的关注和支持。
[QDB] 已经支持聚合字段类型和聚合分组函数
直接贴个 Demo 程序运行的动态图:
[QDB] 一个新的原生二进制转换器,生成文件的体积最小
QDB 新实现了一个 TQBinaryConverter 做为原生的二进制格式,它的源码位于 qconverter_stds.pas 里,相比 MsgPack、Json 及 FireDAC 的二进制格式,其体积也更小,速度也更快。同样 10 万条记录,下面是几种格式的保存结果对比(均未压缩): TQBinaryCon
[教程] 一个程序的基本逻辑
首先,什么是程序? 程序实际上是一堆命令和逻辑判断的组合,就象我们说话,只是词汇和逻辑判断的组合一样。我们人说话最基本的是拼音,然后不同的读音的字符拼在一起,形成逻辑上合理的一句话。而计算机最基本的部分被称为关键词,然后将这些关键词拼在一起,形成逻辑上合理的一句命令操作。我们来看看基本的关键词: 交付 我们生活中将一个
[QDigest] 更新 : 修正了 MD5Hash(AStream,nil) 堆栈溢出的问题
【问题描述】 该问题是由于 MD5Hash 函数被映射到匿名函数版本,而匿名函数版本自己却使用了 MD5Hash(AStream,nil) 去试图调用非匿名函数版本,但却仍被映射到了匿名函数版本造成的。 【更新级别】 推荐 【严重程度】 高 【特别感谢】 青春
[QString] 更新: HashOf 的算法更新为 BKDR
【更新说明】 关于 BKDR 算法本身,请自行百度。算法本身效率不是特别高,但效果相对不错,QString 在 Windows 平台下,使用汇编来提升效率(性能翻倍),而在其它平台,则使用纯 Pascal 实现。 提醒大家注意,没有真正完美通用的哈希算法,哈希的目的只是将内容尽可能的平均分布,有些数据本身就有这样的特性
[QDB] 更新: 使用 OpenDataSet 从数据库中获取记录时,会设置 CommandText 属性
【更新说明】 CommandText 属性原来没有自动设置,在调用 Provider 的 OpenDataSet 方法时,现在会设置这一属性的值(虽然 QDB 本身不使用它,然并卵?) 【更新级别】 可选
[QLog] – 增加了按天分割文件日志的功能
【更新说明】 按文件记录日志时,通过 SetDefaultLogFile 函数可以设置为按天生成日志,也就是说,一旦日志日期切换为第二天,就会将旧的日志文件保存为独立的文件,从而方便查阅。 SetDefaultLogFile 又以下几个参数,分别对日志文件的生成方式和文件名进行限制: AFileName
[QWorker] 使用QWorker的延迟功能快速断掉一个无效的TCP连接
TCP 协议经历了漫长的时间发展到现在,其连接到一个地址时,如果对方地址不存在而且没有 ICMP 协议返回目标不可达消息时,连接就会漫长的等待重试失败。这显然在网络带宽比 TCP 协议产生时高出不知道 N 倍的今天,是一个没有意义的等待,而当我们想要控制这个连接时间,我们会发现我们竟然无从下手(至少我不知道,也许你知道