📄 049.htm
字号:
face="Arial" size="3">KWGEN.EXE</font><font face="宋体" lang="ZH-CN" size="3">,后跟</font><font
face="Arial" size="3">Help</font><font face="宋体" lang="ZH-CN" size="3">工程文件,如</font><font
face="Arial" size="3">KWGEN SPECIAL.HPJ</font><font face="宋体" lang="ZH-CN" size="3">。当</font><font
face="Arial" size="3">KWGEN</font><font face="宋体" lang="ZH-CN" size="3">运行完毕后,就有了与</font><font
face="Arial" size="3">Help</font><font face="宋体" lang="ZH-CN" size="3">工程文件相同的关键词文件,但以</font><font
face="Arial" size="3">.KWF</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 size="3"> </font><font
face="宋体" lang="ZH-CN" size="3">将关键词文件放在编译完的库单元和</font><font
face="Arial" size="3">Help</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 Palette</font><font face="宋体" lang="ZH-CN" size="3">上安装部件时,希望关键词插入</font><font
face="Arial" size="3">Delphi Help</font><font face="宋体" lang="ZH-CN" size="3">系统的搜索索引。</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">④</font><font size="3"> </font><font
face="宋体" lang="ZH-CN" size="3">插入</font><font face="Arial" size="3">Help</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">Delphi</font><font face="宋体" lang="ZH-CN" size="3">的</font><font
face="Arial" size="3">Help</font><font face="宋体" lang="ZH-CN" size="3">索引。</p>
<p> 将关键词文件插入</font><font face="Arial" size="3">Detphi Help</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 size="3"> </font><font
face="宋体" lang="ZH-CN" size="3">将关键词文件放在与编译完的库单元和</font><font
face="Arial" size="3">Heph</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 size="3"> </font><font
face="宋体" lang="ZH-CN" size="3">运行</font><font face="Arial" size="3">HELPINST</font><font
face="宋体" lang="ZH-CN" size="3">程序</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>HELPINST</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">Help</font><font face="宋体" lang="ZH-CN" size="3">索引文件</font><font
face="Arial" size="3">(.HDX)</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 size="3"> </font><font
face="宋体" lang="ZH-CN" size="3">存储和装入属性</font><font face="Arial"
size="3"></p>
<p>Delphi</font><font face="宋体" lang="ZH-CN" size="3">将窗体及其拥有的部件存储在窗体文件</font><font
face="Arial" size="3">(.DFM)</font><font face="宋体" lang="ZH-CN" size="3">中,</font><font
face="Arial" size="3">DFM</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">DFM</font><font face="宋体" lang="ZH-CN" size="3">文件中恢复它们。</p>
<p> 在大多数时候,不需要做任何使部件读写</font><font face="Arial"
size="3">DFM</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 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 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 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 size="3"> </font><font
face="宋体" lang="ZH-CN" size="3">装入后的初始化</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">①</font><font 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">Delphi</font><font face="宋体" lang="ZH-CN" size="3">将窗体的描述存储在</font><font
face="Arial" size="3">DFM</font><font face="宋体" lang="ZH-CN" size="3">文件中。当用户运行程序时,它读取这些描述。</p>
<p> 窗体的描述包含了一系列的窗体属性和窗体中部件的相似描述。每一个部件,包括窗体本身,负责存储和装入自身的描述。</p>
<p> 在缺省情况下,当存储时,部件将所有</font><font face="Arial"
size="3">public</font><font face="宋体" lang="ZH-CN" size="3">和</font><font
face="Arial" size="3">published</font><font face="宋体" lang="ZH-CN" size="3">属性的不同于缺省值的值以声明的顺序写入。当装入时,部件首先构造自己,并将所有属性设为缺省值;然后,读存储的、非缺省的属性值。</p>
<p> 这种缺省机制,满足了大多数部件的需要,而又不需部件编写者的任何工作。然而自己定义存储和装入过程以适合自定义部件需要的方法也有几种。</p>
<p> ②</font><font size="3"> </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">Delphi</font><font face="宋体" lang="ZH-CN" size="3">假设属性没有缺省值,这意味着部件总是存储属性。</p>
<p> 一个属性的值没被构造函数设置,则被假设为零值。为了描述一个缺省值,在属性声明后面加</font><font
face="Arial" size="3">default</font><font face="宋体" lang="ZH-CN" size="3">指令和新的缺省值。</p>
<p> 你也能在重声明属性时描述缺省值。实际上,重声明属性的一个原因是指定不同的缺省值。只描述缺省值,那么在对象创建时并不会自动地给属性赋值,还需要在部件的</font><font
face="Arial" size="3">Create</font><font face="宋体" lang="ZH-CN" size="3">方法中赋所需的值。</p>
<p> 下面的代码用</font><font face="Arial" size="3">Align</font><font
face="宋体" lang="ZH-CN" size="3">属性演示了描述缺省值的过程</font><font
face="Arial" size="3">.</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>type</p>
<p>TStatusBar=class(TPanel)</p>
<p>public</p>
<p>constructor Create(Aowner: TComponent); override; { </font><font face="宋体"
lang="ZH-CN" size="3">覆盖以设置新值</font><font size="3"> </font><font
face="Arial" size="3">}</p>
<p>published</p>
<p>property Align default alBottom; { </font><font face="宋体" lang="ZH-CN" size="3">重新声明缺省值</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>constructor TStatusBar.Create(Aowner: TComponent);</p>
<p>begin</p>
<p>inherited Create(Aowner); { </font><font face="宋体" lang="ZH-CN" size="3">执行继承的初始化过程</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>Align := alBottom; { </font><font face="宋体" lang="ZH-CN" size="3">为</font><font
face="Arial" size="3">Align</font><font face="宋体" lang="ZH-CN" size="3">赋新的缺省值</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">③</font><font 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">Delphi</font><font face="宋体" lang="ZH-CN" size="3">是否存储部件的每一个属性。缺省情况下,在对象的</font><font
face="Arial" size="3">published</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">stored</font><font face="宋体" lang="ZH-CN" size="3">指令,后跟</font><font
face="Arial" size="3">True</font><font face="宋体" lang="ZH-CN" size="3">或</font><font
face="Arial" size="3">False</font><font face="宋体" lang="ZH-CN" size="3">,或者是布尔方法名。你可以给任何属性的声明或重声明加</font><font
face="Arial" size="3">stored</font><font face="宋体" lang="ZH-CN" size="3">表达式。下面的代码显示了部件声明三种新属性。一个属性是总是要存储,一个是不存,第三个则决定于布尔方法的值:</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p>type</p>
<p>TSampleCompiment = class(TComponent)</p>
<p>protected</p>
<p>function storeIt: Boolean;</p>
<p>public { </font><font face="宋体" lang="ZH-CN" size="3">正常情况下在不存</font><font
size="3"> </font><font face="Arial" size="3">} </p>
<p>property Important: Integer stored True; { </font><font face="宋体" lang="ZH-CN"
size="3">总是存储</font><font size="3"> </font><font face="Arial" size="3">}</p>
<p>published { </font><font face="宋体" lang="ZH-CN" size="3">正常情况下保存</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>property UnImportant: Integer stored False; { </font><font face="宋体" lang="ZH-CN"
size="3">不存</font><font size="3"> </font><font face="Arial" size="3">}</p>
<p>property Sometimes: Integer stored StoreIt; { </font><font face="宋体" lang="ZH-CN"
size="3">存储依赖于函数值</font><font size="3"> </font><font face="Arial" size="3">}</p>
<p>end;</p>
<p></font><font size="3"> </font><font face="Arial" size="3"></p>
<p></font><font face="宋体" lang="ZH-CN" size="3">④</font><font 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">Loaded</font><font face="宋体" lang="ZH-CN" size="3">的虚方法,这提供了按需要执行任何初始化的机会。调用</font><font
face="Arial" size="3">Loaded</font><font face="宋体" lang="ZH-CN" size="3">是在窗体和它的控制显示之前,因此,不需要担心初始化会带来屏幕闪烁。</p>
<p> 在部件载入属性时初始化它,要覆盖</font><font face="Arial"
size="3">Loaded</font><font face="宋体" lang="ZH-CN" size="3">方法。</p>
<p> 在</font><font face="Arial" size="3">Loaded</font><font face="宋体"
lang="ZH-CN" size="3">方法中,要做的第一件事是调用继承的</font><font
face="Arial" size="3">Loaded</font><font face="宋体" lang="ZH-CN" size="3">方法。这使得在你的部件执行初始化之前,任何继承的属性都已初始化。</p>
<p> 下面的代码来自于</font><font face="Arial" size="3">TDatabase</font><font
face="宋体" lang="ZH-CN" size="3">部件。在装入后,</font><font face="Arial"
size="3">TDatabase</font><font face="宋体" lang="ZH-CN" size="3">试图重建在它存储时已打开的连接,并描述在连接发生异常时如何处理。</p>
<p> </p>
<p> </font><font face="Arial" size="3">procedure TDatabase.Loaded</p>
<p>begin</p>
<p>inherited Loaded; { </font><font face="宋体" lang="ZH-CN" size="3">总是先调用继承的方法</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>Modified; { </font><font face="宋体" lang="ZH-CN" size="3">设置内部标志</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>try</p>
<p>if FStreamedConnected then Open; { </font><font face="宋体" lang="ZH-CN" size="3">重建联接</font><font
size="3"> </font><font face="Arial" size="3">}</p>
<p>except</p>
<p>if csDesigning in ComponentState then { </font><font face="宋体" lang="ZH-CN"
size="3">在设计时</font><font size="3"> </font><font face="Arial" size="3">}</p>
<p>Application.HandleException(self) { </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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -