![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Delphi
文章平均质量分 79
禹爸爸
这个作者很懒,什么都没留下…
展开
-
Delphi Open Tools API - How to create and add new menu item
之前提介绍过如何编写一个菜单专家(Menu Wizard),但它有一个不足之处--就是我们所编写的菜单项只能作为Delphi IDE环境中的“Help”菜单的子项出现。如果我们想在Delphi IDE主菜单中任一位置插入我们自己的菜单项又应该如何做呢?其实办法很简单,只需要编写一个插件专家(Add-in Wizard),在其构造函数中将菜单插入到Delphi IDE主菜单中,并在其析构函数中...2008-01-23 10:47:00 · 180 阅读 · 0 评论 -
Delphi中的THashedStringList对象
有许多程序员都喜欢使用TStringList类作为键值存储,这是不错的用法。但是TStringList本身只是对数据线性的存储,当数据量大时,对其检索效率极为低下。Delphi在在IniFiles单元中定义了另一个TStringList类,采用了哈希技术存储数据,它就是THashedStringList类。下面这段代码就是摘自IniFiles单元中对THashedStringList的定义。...2007-11-03 00:53:00 · 275 阅读 · 0 评论 -
自己写的一些Delphi常用函数
今天在整理以前写过的代码,发现有些函数还是挺实用的,决定将其贴到Blog上,与众多好友一起分享。...{********************************************************************************模块名称:公用函数库*编写人员:ChrisMao*编写日期:2004.10.30**********************...2007-11-01 21:19:00 · 239 阅读 · 0 评论 -
Delphi中的继承机制
继承是面向对象开发的的特点之一。良好的继承可以有效的降低代码冗余,提高代码复用。Delphi做为一款优秀的面向对象开发工具,在这一方面也不示弱。当我们在Delphi中新建一个窗体时,可以看到如下代码typeTForm1=class(TForm)private...{Privatedeclarations}public...{Publicdeclarations}end;这表示...2007-11-01 17:17:00 · 757 阅读 · 0 评论 -
Delphi访问活动目录
活动目录Active Directory是用于Windows Server的目录服务,它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用。Active Directory使用结构化的数据存储作为目录信息的逻辑层次结构的基础。在某些情况下我们需要通过程序来读取Active Directory中的信息,我们可以使用微软提供的ADSI(Active Directory Serv...2007-10-24 15:08:00 · 190 阅读 · 0 评论 -
Delphi中编写自定义组件
Delphi提供了丰富的VCL组件供编程人员使用,同时还允许编程人员根据实际需要进行自定义组件的编写。组件的代码编写和我们平常写的类很相似,但也有几点不同,一个是需要从TComponent类继承而来,另一个是要使用Published关键字定义我们想要出现在对象观察器中的属性是事件,再一个就是我们要把这些代码添加到一个设计包中,之后通过对这个包进行编译和安装来发布我们编写的组件。组件中事件...2007-10-24 00:03:00 · 184 阅读 · 0 评论 -
Delphi中菜单与工具栏按钮的状态控制
在好多的桌面应用程序中,会使用到菜单和工具栏按钮,不同的用户登录到应用系统中会依据其权限显示相应的菜单与工具栏按钮,在显示出来的菜单与按钮中又会根据程序的状态来设置其有效性。举个简单的例子,通常保存按钮是在编辑内容发生变化后才可以使用,数据集的保存需要在编辑状态下才可以使用。刚开始编写程序时,代码中到处都是这些状态控制代码,如在数据集的“编辑”按钮、菜单的单击事件中启用“保存”和“取消”按钮...2007-10-23 15:01:00 · 239 阅读 · 0 评论 -
统一项目中的编辑、查找与打印
在许多的C/S程序中都会提供对数据库中的数据进行编辑、查询和打印的功能。以往的做法是针对不同的数据表分别制作编辑、查询和打印窗体,每个窗体都是全新的。我们会在项目的多个地方嗅到“代码重复”的味道,使得日后代码的维护和修改变得很艰难。如果是多人合作的项目,这可能会更糟,因为可能每个对程序员可能会针对编辑、查询和打印提供不同的接口方法。 针对以上的问题,我在曾经做过的项目中做了一些调整,现整理出来与...2007-10-22 15:21:00 · 79 阅读 · 0 评论 -
Delphi中的消息机制
许多的面向对象程序设计语言都支持对消息的处理。消息处理是一种动态响应客户类发出的请求,它与过程调用不同。过程调用中,客户类必须知道服务类提供了哪些过程,以及每个过程的调用约定,并且在调用时需要明确指出要调用服务类中的哪个过程,相当于静态地将客户类与服务类进行了某种调用关系的绑定,这将导致客户类与服务类的耦合度增加。消息处理则是动态的,当客户类需要某程服务时,会向服务类发送一个消息,当服务类收到此...2007-10-20 15:18:00 · 148 阅读 · 0 评论 -
Delphi VCL Framework中的Notify模式
在Delphi中进行UI设计时,我们会在Form上放置许多的组件,当我们更改窗体的某些属性时,其上所有组件的相应属性都会随着发生改变,这是如何实现的呢?这里就使用到了Delphi VCL Framework中使用最多的一种设计模式 -- Notify模式。Notify模式最经常发生的应用就是在容器类中的应用。由于容器类管理了许多子类对象,因此客户程序代码可能希望一次操作对所有容器类管理的子类...2007-11-06 16:57:00 · 277 阅读 · 0 评论 -
Delphi VCL Framework中的Action模式
学习过设计模式的人都知道有一种行为模式叫做Command模式。在Delphi的VCL Framework中也使用到了这种模式,那就是Action模式。命令模式使用的目的在于使用对象来封装客户端的请求命令,由于使用以对象封装,因此可以达到下面的效果:请求对象可结合多态以及虚拟方法来提供更大的弹性;负责执行请求的目的对象可以和客户端分离,这就表示多个客户端可以发生相同的请求对象,例如菜...2007-11-07 22:14:00 · 210 阅读 · 0 评论 -
获取Delphi中定义的枚举类型的名称和值
利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型,并获取其名称和值。下面是示例Demo。procedureTForm1.btnTestClick(Sender:TObject);varp:PTypeData;i:Integer;s:String;pt:PTypeInfo;beginListBox1.Items.Clear;pt:=TypeIn...2007-11-08 10:13:00 · 737 阅读 · 0 评论 -
Delphi Open Tools API - Menu Wizard
版权声明:本文为博主原创文章,未经博主允许不得转载。2008-01-21 22:52:00 · 217 阅读 · 0 评论 -
Delphi Open Tools API - Simple Wizard
之前向大家简单的介绍了Open Tools API,现在我们就要亲自动手编写一个简单的Wizard,来体验Open Tools API的魅力所在。在Delphi6中,不再推荐大家使用ExptIntf单元中的TIExpert类做为我们自己编写的Wizard的基类,而是改用TInterfacedObject做为其基类,并实现ToolsAPI单元中的一个或我个接口。编写一个Wizard必须要实...2008-01-21 09:56:00 · 131 阅读 · 0 评论 -
Delphi Open Tools API概述
Delphi为我们提供了一组AIP(Open Tools API),允许我们使用这些函数,将自定义的菜单项、工具栏按钮、创建窗体专家以及更多的东西加入到IDE中,以提高自己的开发效率。使用Tools API是一件很容易的事,只要实现一些特定的接口,并调用另一些接口提供的服务即可。编写一个Tools API代码和编写组件或是属性编辑器很类似,必须将这些代码编译为设计期包或是DLL加载到Delp...2008-01-20 20:56:00 · 219 阅读 · 0 评论 -
自己动手编写Delphi Expert
在刚刚开始编程阶段,自己一步步编写出一个登录窗体,或是一个能够对数据表记录进行增、删、改的窗体时,会感到非常的兴奋。但随着编程时间和编写项目的增加,会发现这种没有什么技术含量的窗体被不断的重复编写,于是乎开始思考有没有一种一劳永逸的办法可以帮助我们摆脱这种窘境呢?有的朋友或者会说,将这些做成一个标准的窗体存放在某个地主,在需要的时候将其Copy过来,然后略为修改。不可否认,这也是一种方法,但对于...2008-01-09 23:22:00 · 94 阅读 · 0 评论 -
Delphi与Java中的日期互换
在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了。通过查阅资料,发现两者对日期类型的定义略有不同。Java中日期使用的是长整型进行存储的,它表示距“1970-1-1”的毫秒数。如“1970-1-2”是在“1970-1-1”后的86400000毫秒,所以Java中就...2007-12-07 09:25:00 · 91 阅读 · 0 评论 -
Delphi VCL Framework中的ForEach模式
在实际的工作中偶尔会遇到如下情况:让一个类继承架构的对象实体能够通过一致的方法执行另外一个目标类对象的方法或是独立的函数,目标类需要被执行的方法或是独立的函数可以自由地改变或是增加而会影响执行类的架构。这个时候就会用到ForEach设计模式。ForEach模式的目的是让拥有稳定继承架构的类对象能够执行外部可变化的方法或是函数。它适用于以下两种情况:如果应用系统中已经有一个稳定的继承架构...2007-11-20 22:27:00 · 250 阅读 · 0 评论 -
Delphi中获取某类的祖先类及其所在单元名称
前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。//参数说明://AClass:需要获取祖先类的类//ASeries:是一个字符串列表,用来存放返回的祖先类及其所在单元的名称procedureGetInheritanceSeries(AClass:TCla...2007-11-17 21:09:00 · 196 阅读 · 0 评论 -
Delphi中的工厂模式
在面向对象的程序设计中,某一功能的实现往往是依赖多个类的协同工作,这当中不必可避免的会有一个核心的关键类,非关键类对关键类的依赖程度比较高(耦合比较紧),关键类的变动会景响到非关键类与其通信。比如在某个MIS系统中,用户数据是存储在文件中的,那么所有数据的读取与保存都依赖与那和与文件进行通信的类。突然某一天客户说要将数据存储到数据库中,那么我们是必要找出所有使用这些与文件通信的类的代码,并使用新...2007-11-16 20:31:00 · 280 阅读 · 0 评论 -
Delphi Open Tools API - Menu Wizard
在Delphi中编写一个Menu Wizard也是相当的简单,在实现IOTAWizard接口的同时,也实现IOTAMenuWizard接口即可。原创 2008-01-21 22:52:00 · 1151 阅读 · 0 评论 -
Delphi Open Tools API概述
Delphi为我们提供了一组AIP(Open Tools API),允许我们使用这些函数,将自定义的菜单项、工具栏按钮、创建窗体专家以及更多的东西加入到IDE中,以提高自己的开发效率。 使用Tools API是一件很容易的事,只要实现一些特定的接口,并调用另一些接口提供的服务即可。编写一个Tools API代码和编写组件或是属性编辑器很类似,必须将这些代码编译为设计期包或是DLL原创 2008-01-20 20:56:00 · 3179 阅读 · 0 评论 -
Delphi VCL Framework中的Notify模式
在Delphi中进行UI设计时,我们会在Form上放置许多的组件,当我们更改窗体的某些属性时,其上所有组件的相应属性都会随着发生改变,这是如何实现的呢?这里就使用到了Delphi VCL Framework中使用最多的一种设计模式 -- Notify模式。 Notify模式最经常发生的应用就是在容器类中的应用。由于容器类管理了许多子类对象,因此客户程序代码可能希望一次操作对所有容器类管理原创 2007-11-06 16:57:00 · 4535 阅读 · 2 评论 -
Delphi中的THashedStringList对象
有许多程序员都喜欢使用TStringList类作为键值存储,这是不错的用法。但是TStringList本身只是对数据线性的存储,当数据量大时,对其检索效率极为低下。Delphi在在IniFiles 单元中定义了另一个TStringList类,采用了哈希技术存储数据,它就是THashedStringList类。下面这段代码就是摘自IniFiles单元中对THashedStringList的定原创 2007-11-03 00:53:00 · 3138 阅读 · 0 评论 -
自己写的一些Delphi常用函数
今天在整理以前写过的代码,发现有些函数还是挺实用的,决定将其贴到Blog上,与众多好友一起分享。...{******************************************************************************* * 模块名称: 公用函数库 * 编写人员: Chris Mao * 编写日期: 2004.10.30 **原创 2007-11-01 21:19:00 · 4816 阅读 · 8 评论 -
Delphi中的继承机制
继承是面向对象开发的的特点之一。良好的继承可以有效的降低代码冗余,提高代码复用。Delphi做为一款优秀的面向对象开发工具,在这一方面也不示弱。当我们在Delphi中新建一个窗体时,可以看到如下代码type TForm1 = class(TForm) private ...{ Private declarations } public ...{ Publi原创 2007-11-01 17:17:00 · 7449 阅读 · 1 评论 -
Delphi访问活动目录
活动目录Active Directory是用于Windows Server的目录服务,它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用。Active Directory使用结构化的数据存储作为目录信息的逻辑层次结构的基础。 在某些情况下我们需要通过程序来读取Active Directory中的信息,我们可以使用微软提供的ADSI(Active原创 2007-10-24 15:08:00 · 2050 阅读 · 0 评论 -
Delphi中编写自定义组件
Delphi提供了丰富的VCL组件供编程人员使用,同时还允许编程人员根据实际需要进行自定义组件的编写。组件的代码编写和我们平常写的类很相似,但也有几点不同,一个是需要从TComponent类继承而来,另一个是要使用Published关键字定义我们想要出现在对象观察器中的属性是事件,再一个就是我们要把这些代码添加到一个设计包中,之后通过对这个包进行编译和安装来发布我们编写的组件。组件中事件的原创 2007-10-24 00:03:00 · 7305 阅读 · 6 评论 -
Delphi中菜单与工具栏按钮的状态控制
在好多的桌面应用程序中,会使用到菜单和工具栏按钮,不同的用户登录到应用系统中会依据其权限显示相应的菜单与工具栏按钮,在显示出来的菜单与按钮中又会根据程序的状态来设置其有效性。举个简单的例子,通常保存按钮是在编辑内容发生变化后才可以使用,数据集的保存需要在编辑状态下才可以使用。 刚开始编写程序时,代码中到处都是这些状态控制代码,如在数据集的“编辑”按钮、菜单的单击事件中启用“保存原创 2007-10-23 15:01:00 · 5296 阅读 · 0 评论 -
统一项目中的编辑、查找与打印
在许多的C/S程序中都会提供对数据库中的数据进行编辑、查询和打印的功能。以往的做法是针对不同的数据表分别制作编辑、查询和打印窗体,每个窗体都是全新的。我们会在项目的多个地方嗅到“代码重复”的味道,使得日后代码的维护和修改变得很艰难。如果是多人合作的项目,这可能会更糟,因为可能每个对程序员可能会针对编辑、查询和打印提供不同的接口方法。 针对以上的问题,我在曾经做过的项目原创 2007-10-22 15:21:00 · 1070 阅读 · 0 评论 -
获取Delphi中定义的枚举类型的名称和值
利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型,并获取其名称和值。下面是示例Demo。procedure TForm1.btnTestClick(Sender: TObject);var p: PTypeData; i: Integer; s: String; pt: PTypeInfo;begin ListBox1.Item原创 2007-11-08 10:13:00 · 7744 阅读 · 0 评论 -
Delphi VCL Framework中的Action模式
学习过设计模式的人都知道有一种行为模式叫做Command模式。在Delphi的VCL Framework中也使用到了这种模式,那就是Action模式。 命令模式使用的目的在于使用对象来封装客户端的请求命令,由于使用以对象封装,因此可以达到下面的效果: 请求对象可结合多态以及虚拟方法来提供更大的弹性; 负责执行请求的目的对象可以和客户端分离,这就表示多个客户原创 2007-11-07 22:14:00 · 1814 阅读 · 0 评论 -
Delphi Open Tools API - How to create and add new menu item
之前提介绍过如何编写一个菜单专家(Menu Wizard),但它有一个不足之处--就是我们所编写的菜单项只能作为Delphi IDE环境中的“Help”菜单的子项出现。如果我们想在Delphi IDE主菜单中任一位置插入我们自己的菜单项又应该如何做呢? 其实办法很简单,只需要编写一个插件专家(Add-in Wizard),在其构造函数中将菜单插入到Delphi IDE主菜单中,并原创 2008-01-23 10:47:00 · 1550 阅读 · 0 评论 -
自己动手编写Delphi Expert
在刚刚开始编程阶段,自己一步步编写出一个登录窗体,或是一个能够对数据表记录进行增、删、改的窗体时,会感到非常的兴奋。但随着编程时间和编写项目的增加,会发现这种没有什么技术含量的窗体被不断的重复编写,于是乎开始思考有没有一种一劳永逸的办法可以帮助我们摆脱这种窘境呢?有的朋友或者会说,将这些做成一个标准的窗体存放在某个地主,在需要的时候将其Copy过来,然后略为修改。不可否认,这也是一种方法,原创 2008-01-09 23:22:00 · 1901 阅读 · 0 评论 -
Delphi与Java中的日期互换
在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了。 通过查阅资料,发现两者对日期类型的定义略有不同。Java中日期使用的是长整型进行存储的,它表示距“1970-1-1”的毫秒数。如“1970-1-2”是在“1970-1-1”后的86400000毫秒,所以J原创 2007-12-07 09:25:00 · 2193 阅读 · 2 评论 -
Delphi VCL Framework中的ForEach模式
在实际的工作中偶尔会遇到如下情况:让一个类继承架构的对象实体能够通过一致的方法执行另外一个目标类对象的方法或是独立的函数,目标类需要被执行的方法或是独立的函数可以自由地改变或是增加而会影响执行类的架构。这个时候就会用到ForEach设计模式。 ForEach模式的目的是让拥有稳定继承架构的类对象能够执行外部可变化的方法或是函数。 它适用于以下两种情况: 如果应用系统原创 2007-11-20 22:27:00 · 2189 阅读 · 0 评论 -
Delphi中获取某类的祖先类及其所在单元名称
前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。//参数说明://AClass: 需要获取祖先类的类//ASeries: 是一个字符串列表,用来存放返回的祖先类及其所在单元的名称procedure GetInheritanceSeries(AClass原创 2007-11-17 21:09:00 · 2928 阅读 · 2 评论 -
Delphi中的工厂模式
在面向对象的程序设计中,某一功能的实现往往是依赖多个类的协同工作,这当中不必可避免的会有一个核心的关键类,非关键类对关键类的依赖程度比较高(耦合比较紧),关键类的变动会景响到非关键类与其通信。比如在某个MIS系统中,用户数据是存储在文件中的,那么所有数据的读取与保存都依赖与那和与文件进行通信的类。突然某一天客户说要将数据存储到数据库中,那么我们是必要找出所有使用这些与文件通信的类的代码,并原创 2007-11-16 20:31:00 · 3624 阅读 · 0 评论 -
ASP中最好的CMS系统的比较和汇总
在Delphi中编写一个Menu Wizard也是相当的简单,在实现IOTAWizard接口的同时,也实现IOTAMenuWizard接口即可。unit MenuWizardDemoUnit;interfaceuses SysUtils, ToolsAPI, Dialogs;type TMenuWizardDemo = class(TNotifierObject, IOTAWizar转载 2008-01-21 22:52:00 · 1341 阅读 · 0 评论 -
Delphi Open Tools API - Simple Wizard
之前向大家简单的介绍了Open Tools API,现在我们就要亲自动手编写一个简单的Wizard,来体验Open Tools API的魅力所在。 在Delphi6中,不再推荐大家使用ExptIntf单元中的TIExpert类做为我们自己编写的Wizard的基类,而是改用TInterfacedObject做为其基类,并实现ToolsAPI单元中的一个或我个接口。 编写原创 2008-01-21 09:56:00 · 2056 阅读 · 0 评论