⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 047.htm

📁 delphi教程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
face="Arial" size="3">Windows</font><font face="宋体" lang="ZH-CN" size="3">控制的子类</p>
<p>  ●</font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN"
size="3">建立非可视部件</p>
<p> </p>
<p>  下表列出了不同建立途径的起始类</p>
<p> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">表</font><font face="Arial" size="3">19.1
</font><font face="宋体" lang="ZH-CN" size="3">定义部件的起始点</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> 途</font><font face="Arial"
size="3"> </font><font face="宋体" lang="ZH-CN" size="3">径     </font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">起</font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">始</font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">类</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> </font><font face="Arial" size="3">
</font><font face="宋体" lang="ZH-CN" size="3">─────────────────────────────</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">修改已有部件</font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3"> </font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">任何已有部件,如</font><font
face="Arial" size="3">TButton</font><font face="宋体" lang="ZH-CN" size="3">、</font><font
face="Arial" size="3">TListBox</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">或抽象部件对象如</font><font
face="Arial" size="3">TCustomListBox</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">建立原始控制   </font><font
face="Arial" size="3"> TCustomControl</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">建立图形控制</font><font
face="Arial" size="3"> TGraphicControl</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">建立窗口控制的子类</font><font
face="Arial" size="3"> TWinControl</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">建立非可视部件  </font><font
face="Arial" size="3"> TComponent</p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p> </p>
<p>  也可以继承非部件的其它对象,但无法在窗体设计窗口中操作它们。</font><font
face="Arial" size="3">Delphi</font><font face="宋体" lang="ZH-CN" size="3">包括许多这种对象,如</font><font
face="Arial" size="3">TINIFile</font><font face="宋体" lang="ZH-CN" size="3">、</font><font
face="Arial" size="3">TFont</font><font face="宋体" lang="ZH-CN" size="3">等。</p>
<p>  </font><font face="Arial" size="3">1. </font><font face="宋体" lang="ZH-CN"
size="3">修改已有控制</p>
<p>  建立部件的最简单的方法是继承一个已有的、可用的部件并定制它。可以从</font><font
face="Arial" size="3">Delphi</font><font face="宋体" lang="ZH-CN" size="3">提供的任何部件中继承。例如,可以改变标准控制的缺省属性值,如</font><font
face="Arial" size="3">TButton</font><font face="宋体" lang="ZH-CN" size="3">。</p>
<p>  有些控制,如</font><font face="Arial" size="3">Listbox</font><font
face="宋体" lang="ZH-CN" size="3">和</font><font face="Arial" size="3">Grid</font><font
face="宋体" lang="ZH-CN" size="3">等有许多相同变量,在这种情况下,</font><font
face="Arial" size="3">Delphi</font><font face="宋体" lang="ZH-CN" size="3">提供了抽象控制类型,从该类型出发可定制出许多的类型。例如,你也许想建立</font><font
face="Arial" size="3">TListBox</font><font face="宋体" lang="ZH-CN" size="3">的特殊类型,这种部件没有标准</font><font
face="Arial" size="3">TListBox</font><font face="宋体" lang="ZH-CN" size="3">的某些属性,你不能将属性从一个祖先类型中移去,因此你需要从比</font><font
face="Arial" size="3">TListBox</font><font face="宋体" lang="ZH-CN" size="3">更高层次的部件继承。例如</font><font
face="Arial" size="3">TCustomListBox</font><font face="宋体" lang="ZH-CN" size="3">,该部件实现了</font><font
face="Arial" size="3">TCustomListBox</font><font face="宋体" lang="ZH-CN" size="3">的所有属性但没有公布</font><font
face="Arial" size="3">(Publishing)</font><font face="宋体" lang="ZH-CN" size="3">它们。当从一个诸如</font><font
face="Arial" size="3">TCustomListBox</font><font face="宋体" lang="ZH-CN" size="3">的抽象类中继承时,你公布那些你想使之可获得的属性而让其它的保护起来</font><font
face="Arial" size="3">(protected)</font><font face="宋体" lang="ZH-CN" size="3">。</p>
<p>  </font><font face="Arial" size="3">2. </font><font face="宋体" lang="ZH-CN"
size="3">建立原始控制</p>
<p>  标准控制是在运行时可见的。这些标准控制都从</font><font
face="Arial" size="3">TWinControl</font><font face="宋体" lang="ZH-CN" size="3">,继承来的,当你建立原始控制时,你使用</font><font
face="Arial" size="3">TCustomControl</font><font face="宋体" lang="ZH-CN" size="3">作为起始点。标准控制的关键特征是它具有窗口句柄,句柄保存在属性</font><font
face="Arial" size="3">Handle</font><font face="宋体" lang="ZH-CN" size="3">中,这种控制:</p>
<p> </font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">●</font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">能接受输入焦点</p>
<p> </font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">●</font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">能将句柄传送给</font><font
face="Arial" size="3">Windows API</font><font face="宋体" lang="ZH-CN" size="3">函数</p>
<p> </p>
<p>  如果控制不需要接受输入焦点,你可把它做成图形控制,这可能节省系统资源。</p>
<p>  </font><font face="Arial" size="3">3. </font><font face="宋体" lang="ZH-CN"
size="3">建立图形控制</p>
<p>  图形控制非常类似定制的控制,但它们没有窗口句柄,因此不占有系统资源。对图形控制最大的限制是它们不能接收输入焦点。你需要从</font><font
face="Arial" size="3">TGraphicControl</font><font face="宋体" lang="ZH-CN" size="3">继承,它提供了作图的</font><font
face="Arial" size="3">Canvas</font><font face="宋体" lang="ZH-CN" size="3">和能处理</font><font
face="Arial" size="3">WM_PAINT</font><font face="宋体" lang="ZH-CN" size="3">消息,你需要覆盖</font><font
face="Arial" size="3">Paint</font><font face="宋体" lang="ZH-CN" size="3">方法。</p>
<p>  </font><font face="Arial" size="3">4. </font><font face="宋体" lang="ZH-CN"
size="3">继承窗口控制</font><font face="Arial" size="3"></p>
<p>Windows</font><font face="宋体" lang="ZH-CN" size="3">中有一种称之为窗口类的概念,类似于面向对象的对象和类的概念。窗口类是</font><font
face="Arial" size="3">Windows</font><font face="宋体" lang="ZH-CN" size="3">中相同窗口或控制的不同实例之间共享的信息集合。当你用传统的</font><font
face="Arial" size="3">Windows</font><font face="宋体" lang="ZH-CN" size="3">编程方法创建一种新的控制,你要定义一个新的窗口类,并在</font><font
face="Arial" size="3">Windows</font><font face="宋体" lang="ZH-CN" size="3">中注册。你也能基于已有的窗口类创建新的窗口类。这就称为从窗口类继承。在传统的</font><font
face="Arial" size="3">Windows</font><font face="宋体" lang="ZH-CN" size="3">编程中,如果你想建立客户化的控制,你就必须将其做在动态链接库里,就象标准</font><font
face="Arial" size="3">Windows</font><font face="宋体" lang="ZH-CN" size="3">控制,并且提供一个访问界面。使用</font><font
face="Arial" size="3">Delphi</font><font face="宋体" lang="ZH-CN" size="3">,你能创建一个部件包装在已有窗口类之上。如果你已有客户化控制的库,并想使其运行在你的</font><font
face="Arial" size="3">Delphi</font><font face="宋体" lang="ZH-CN" size="3">应用中,那你就能创建一个使你能使用已有控制和获得新的控制的部件。在库单元</font><font
face="Arial" size="3">StdCtrls</font><font face="宋体" lang="ZH-CN" size="3">中有许多这样的例子。</p>
<p>  </font><font face="Arial" size="3">5. </font><font face="宋体" lang="ZH-CN"
size="3">建立非可视化的部件</p>
<p>  抽象对象类型</font><font face="Arial" size="3">TComponent</font><font
face="宋体" lang="ZH-CN" size="3">是所有部件的基础类型。从</font><font
face="Arial" size="3">TComponent</font><font face="宋体" lang="ZH-CN" size="3">直接继承所创建的部件就是非可视化部件。你编写的大多数部件都是可视控制。</font><font
face="Arial" size="3">TComponent</font><font face="宋体" lang="ZH-CN" size="3">定义了部件在</font><font
face="Arial" size="3">FormDesigner</font><font face="宋体" lang="ZH-CN" size="3">中所需的基本的属性和方法。因此,从</font><font
face="Arial" size="3">TComponent</font><font face="宋体" lang="ZH-CN" size="3">继承来的任何部件都具备设计能力。</p>
<p>  非可视部件相当少,主要用它们作为非可视程序单元(如数据库单元)和对话框的界面。</p>
<p> </font><font face="Arial" size="3"></p>
<p>19.2.1.3 </font><font face="宋体" lang="ZH-CN" size="3">建立新部件的方法</p>
<p> </p>
<p>  建立新部件的方法有两种:</p>
<p>  ●</font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN"
size="3">手工建立部件</font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> ●</font><font face="Arial"
size="3"> </font><font face="宋体" lang="ZH-CN" size="3">使用</font><font face="Arial"
size="3">Component Expert</p>
<p> </p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> 一旦完成建立后,就得到所需的最小功能单位的部件,并可以安装在</font><font
face="Arial" size="3">Component Palette</font><font face="宋体" lang="ZH-CN" size="3">上。安装完后,你就能将新部件放置在窗体窗口,并可在设计阶段和运行阶段进行测试。你还能为部件增加新的特征、更新选择板、重新测试。</p>
<p>  </font><font face="Arial" size="3">1. </font><font face="宋体" lang="ZH-CN"
size="3">手工创建部件</font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">显然创建部件最容易的方法是使用</font><font
face="Arial" size="3">Component Expert</font><font face="宋体" lang="ZH-CN" size="3">。然而,你也能通过手工来完成相同步骤。</p>
<p>  手工创建部件需要下列三步:</p>
<p> </font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">●</font><font
face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN" size="3">创建新的库单元</p>
<p>  ●</font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN"
size="3">继承一个部件对象</font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> ●</font><font face="Arial"
size="3"> </font><font face="宋体" lang="ZH-CN" size="3">注册部件</p>
<p> </p>
<p>  ⑴</font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN"
size="3">创建新的库单元</p>
<p>  库单元是</font><font face="Arial" size="3">Object Pascal</font><font
face="宋体" lang="ZH-CN" size="3">代码的独立编译单位。每一个窗体有自己的库单元。大多数部件(在逻辑上是一组)也有自己的库单元。</p>
<p>  当你建立部件时,你可以为部件创建一个库单元,也可将新的部件加在已有的库单元中。</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> ①</font><font face="Arial"
size="3"> </font><font face="宋体" lang="ZH-CN" size="3">为部件创建库单元,可选择</font><font
face="Arial" size="3">File/New... </font><font face="宋体" lang="ZH-CN" size="3">,在</font><font
face="Arial" size="3">New Items</font><font face="宋体" lang="ZH-CN" size="3">对话框中选择</font><font
face="Arial" size="3">Unit</font><font face="宋体" lang="ZH-CN" size="3">,</font><font
face="Arial" size="3">Delphi</font><font face="宋体" lang="ZH-CN" size="3">将创建一个新文件,并在代码编辑器中打开它</font><font
face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3"> ②</font><font face="Arial"
size="3"> </font><font face="宋体" lang="ZH-CN" size="3">在已有库单元中增加部件,只须选择</font><font
face="Arial" size="3">File/OPen</font><font face="宋体" lang="ZH-CN" size="3">为已有库单元选择源代码。在该库单元中只能包含部件代码,如果该库单元中有一个窗体,将产生错误</p>
<p> </p>
<p>  ⑵</font><font face="Arial" size="3"> </font><font face="宋体" lang="ZH-CN"
size="3">继承一个部件对象</p>
<p>  每个部件都是</font><font face="Arial" size="3">TComponent</font><font
face="宋体" lang="ZH-CN" size="3">的后代对象。也可从</font><font face="Arial"
size="3">TControl</font><font face="宋体" lang="ZH-CN" size="3">、</font><font
face="Arial" size="3">TGraphicControl</font><font face="宋体" lang="ZH-CN" size="3">等继承。</p>
<p>  为继承一个部件对象,要将对象类型声明加在库单元的</font><font
face="Arial" size="3">interface</font><font face="宋体" lang="ZH-CN" size="3">部分。</p>
<p>  例如,建立一个最简单的从</font><font face="Arial" size="3">TComponent</font><font
face="宋体" lang="ZH-CN" size="3">直接继承非可视的部件,将下列的类型定义加在部件单元的</font><font
face="Arial" size="3">interface</font><font face="宋体" lang="ZH-CN" size="3">部分。</p>
<p> </p>
<p>  </font><font face="Arial" size="3">type</p>
<p>TNewComponent=class(TComponent)</p>
<p></font><font face="宋体" lang="ZH-CN" size="3">……</font><font face="Arial"
size="3"></p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -