葉勇碧 發表於 2022-2-4 13:19:00

Delphi自定义组件

<p>1.组件设计基础</p>
<p>a.编写组件步骤:</p>
<p>&nbsp; 1)确定一个祖先类</p>
<p>TObject:直接从TObject继承下来的类不是组件。有些以此为基类的对象在设计期不需要使用,如TIniFile</p>
<p>TComponent:这是非可视组件的起点,它的特点是在设计时能够以流的方式在IDE上存取</p>
<p>TGraphicControl:创建一个不需要窗口句柄、但要在屏幕上显示的组件时,用这个类作为祖先类</p>
<p>TWinControl:所有需要窗口句柄的组件,都应以该类为基类。该类提供了Windows组件的一般属性和事件</p>
<p>TCustomControl:该类是从TWinControl继承下来的。它具有Canvas属性和Paint()方法,能够控制组建的外观。也用于需要句柄的组件</p>
<p>TCustomClassName:VCL中有些类的属性是不公开的,它们用来作为组件的祖先类。可以以它为祖先类创建出自定义组件,每个组件公开自己的属性</p>
<p>TComponentName:一个现有的组件,譬如TEdit、TPanel或TScrollBox。与其创建一个新的组件,不如扩展一个现有的组件。大部分自定义组件都是这样的</p>
<p>&nbsp; 2)创建一个组件单元。</p>
<p>通过选择Component|New Component菜单命令来打开组件专家。在组件专家里,输入组件的祖先类名、组件的类名、组件显示在的面板页和组件的单元名。</p>
<p>点击OK,Delphi会自动创建组件单元,该单元有组件类的声明和注册过程</p>
<p>3)在新组件中添加属性、方法和事件。</p>
<p>(1)加入简单类型的属性:简单类型的属性是指数字、字符串和字符</p>
<p>property InterProp:Integer read FInterProp write SetInterProp;</p>
<p>(2)加入枚举型的属性:例如枚举属性Align,大部分可视的组件都有这个属性</p>
<p>type</p>
<p>&nbsp; TEnumProp=(epZero,epOne,epTwo);</p>
<p>&nbsp; property EnumPeop:TEnumProp read FEnumPeop write SetEnumPeop;</p>
<p>(3)加入集合型的属性</p>
<p>要在Object Inspect中编辑集合型的属性,可以把这个属性展开。这样,集合型的每个元素就好像布尔类型的属性</p>
<p>type</p>
<p>&nbsp; TSetOption=(pone,ptwo,pthree);</p>
<p>&nbsp; TSetOptions=set of TSetOption;</p>
<p>property Options:TSetOptions read FOptions write SetOptions;</p>
<p>4)测试该组件</p>
<p>5)在Delphi中注册该组件。</p>
<p>6)为该组件建立帮助文件。</p>
<p>&nbsp;</p>
<p>b:组件包</p>
<p>优点:</p>
<p>1.减少代码</p>
<p>2.使应用程序更容易分发</p>
<p>3.包容组件</p>
<p>&nbsp;</p>
<p>c.包文件</p>
<p>.dpk包的源文件&nbsp;&nbsp;           这个文件时包编辑器创建的,可以把它当作Delphi的项目文件(.dpr文件)</p>
<p>.dcp运行期/设计期包的符号文件&nbsp;&nbsp;   &nbsp; 这是个编译过的包文件,它包含包的符号信息及IDE需要的头信息</p>
<p>.dcu编译过的单元         &nbsp; 包中包含一个单元,就会有一个.dcu文件</p>
<p>.bpl运行期\设计期包的库文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这就是运行期\设计期包,相当于DLL。如果这是个运行期包,就必须把它与应用程序一起分发(如果应用程序使用了运行期包的话)。如果是个设计期包,就必须把它分发给需要用它编程的程序员。请注意,必须分发单元的源代码或者一个.dcp文件</p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/AP0606436/p/15862721.html
頁: [1]
查看完整版本: Delphi自定义组件