DELPHI基础教程:Delphi自定义部件开发(一)[1]
Delphi除了支持使用可视化部件所见即所得地建立应用程序外 还支持为开发应用而设计自己的部件
在本章中将阐述如何为Delphi应用程序编写部件 这一章将达到两个目的
● 教你如何自定义部件
● 使你的部件成为Delphi环境的有机组合部分
Delphi部件原理
什么是部件
部件是Delphi应用程序的程序构件 尽管大多数部件代表用户界面的可见元素 但部件也可以是程序中的不可见元素 如数据库部件 为弄清什么是部件可以从三个方面来考察它 功能定义 技术定义和经验定义
部件的功能定义
从最终用户角度 部件是在Component Palette上选择的 并在窗体设计窗口和代码窗口中操作的元素 从部件编写者角度 部件是代码中的对象 在编写部件之前 你应用相当熟悉已有的Delphi部件 这样才能使你的部件适合用户的需要 编写部件的目标之一是使部件尽可能的类似其它部件
部件的技术定义
从最简单的角度看 部件是任何从TComponent继承的对象 TComponent定义了所有部件必须要的 最基本的行为 例如 出现在Component Palette上和在窗体设计窗口中编辑的功能 但是TComponent并不知如何处理你的部件的具体功能 因此 你必须自己描述它
部件编写者自己的定义
在实际编程中 部件是能插入Delphi开发环境的任何元素 它可能具有程序的各种复杂性 简而言之 只要能融入部件框架 部件就是你用代码编写的一切 部件定义只是接口描述 本章将详细阐述部件框架 说明部件的有限性 正如说明编程的有限性 本章不准备教你用所给语言编写每一种部件 只能告诉编定代码的方法和怎样使部件融入Delphi环境
编写部件的不同之处
在Delphi环境中建立部件和在应用程序中使用部件有三个重要差别
● 编写部件的过程是非可视化的
● 编写部件需要更深入的关于对象的知识
● 编写部件需要遵循更多的规则
编写部件是非可视化的
编写部件与建立Delphi应用最明显的区别是部件编写完全以代码的形式进行 即非可视化的 因为Delphi应用的可视化设计需要已完成的部件 而建立这些部件就需要用Object Pascal 代码编写
虽然你无法使用可视化工具来建立部件 但你能运用 Delphi开发环境的所有编程特性如代码编辑器 集成化调试和对象浏览
编写部件需要更深的有关对象的知识
除了非可视化编程之外 建立部件和使用它们的最大区别是 当建立新部件时 需要从已存部件中继承产生一个新对象类型 并增加新的属性和方法 另一方面 部件使用者 在建立Delphi应用时 只是使用已有部件 在设计阶段通过改变部件属性和描述响应事件的方法来定制它们的行为
当继承产生一个新对象时 你有权访问祖先对象中对最终用户不可见的部分 这些部分被称为protected界面的 在很大部分的实现上 后代对象也需要调用他们的祖先对象的方法 因此 编写部件者应相当熟悉面向对象编程特性
编写部件要遵循更多的规则
编写部件过程比可视化应用生成采用更传统的编程方法 与使用已有部件相比 有更多的规则要遵循 在开始编写自己的部件之前 最重要的事莫过于熟练应用Delphi自带的部件 以得到对命名规则以及部件用户所期望功能等的直观认识 部件用户期望部件做到的最重要的事情莫过于他们在任何时候能对部件做任何事 编写满足这些期望的部件并不难 只要预先想到和遵循规则
建立部件过程概略
简而言之 建立自定义部件的过程包含下列几步
● 建立包含新部件的库单元
● 从已有部件类型中继承得到新的部件类型
● 增加属性 方法和事件
● 用Delphi注册部件
● 为部件的属性方法和事件建立Help文件
如果完成这些工作 完整的部件包含下列 个文件
● 编译的库单元 ( DCU文件)
● 选择板位图 ( DCR文件)
● Help文件 ( HLP文件)
● Help keyword文件 ( KWF文件)
Delphi部件编程方法
Delphi部件编程概述
Delphi可视部件类库
Delphi的部件都是可视部件类库(VCL)的对象继承树的一部分 下面列出组成VCL的对象的关系 TComponent是VCL中每一个部件的共同祖先 TComponent提供了Delphi部件正常工作的最基本的属性和事件 库中的各条分支提供了其它的更专一的功能
当建立部件时 通过从对象树中已有的对象继承获得新对象 并将其加入VCL中
建立部件的起点
部件是你在设计时想操作的任意程序元素 建立新部件意味着从已有类型中继承得到新的部件对象类
建立新部件的主要途径如下
● 修改已有的控制
● 建立原始控制
● 建立图形控制
● 建立Windows控制的子类
● 建立非可视部件
下表列出了不同建立途径的起始类
表 定义部件的起始点
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
途 径 起 始 类
─────────────────────────────
修改已有部件 任何已有部件 如TButton TListBox
或抽象部件对象如TCustomListBox
建立原始控制 TCustomControl
建立图形控制 TGraphicControl
建立窗口控制的子类 inControl
建立非可视部件 TComponent
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
也可以继承非部件的其它对象 但无法在窗体设计窗口中操作它们 Delphi包括许多这种对象 如TINIFile TFont等
修改已有控制
建立部件的最简单的方法是继承一个已有的 可用的部件并定制它 可以从Delphi提供的任何部件中继承 例如 可以改变标准控制的缺省属性值 如TButton
有些控制 如Listbox和Grid等有许多相同变量 在这种情况下 Delphi提供了抽象控制类型 从该类型出发可定制出许多的类型 例如 你也许想建立TListBox的特殊类型 这种部件没有标准TListBox的某些属性 你不能将属性从一个祖先类型中移去 因此你需要从比TListBox更高层次的部件继承 例如TCustomListBox 该部件实现了TCustomListBox的所有属性但没有公布(Publishing)它们 当从一个诸如TCustomListBox的抽象类中继承时 你公布那些你想使之可获得的属性而让其它的保护起来(protected)
建立原始控制
标准控制是在运行时可见的 这些标准控制都从inControl 继承来的 当你建立原始控制时 你使用TCustomControl作为起始点 标准控制的关键特征是它具有窗口句柄 句柄保存在属性Handle中 这种控制
● 能接受输入焦点
● 能将句柄传送给Windows API函数
如果控制不需要接受输入焦点 你可把它做成图形控制 这可能节省系统资源
lishixinzhi/Article/program/Delphi/201311/25121
2024-09-19 广告