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

📄 009.htm

📁 Delphi基础知识讲座
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<p>DataGrid1:TDataGrid;</p>
<p>Database1:TDatabase;</p>
<p>TableSet1:TTableSet;</p>
<p>VisibleSession1:TVisibleSession;</p>
<p>private</p>
<p>{<font face="宋体" lang="ZH-CN">私有域说明}</font></p>
<p>public</p>
<p>{<font face="宋体" lang="ZH-CN">公有域说明}</font> </p>
<p>end; </p>
<p>var</p>
<p>AForm:TForm;</p>
<p>DataForm:TDataForm;</p>
<p><font face="宋体" lang="ZH-CN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为</font>TDataForm<font
face="宋体" lang="ZH-CN">是</font>TForm<font face="宋体" lang="ZH-CN">类型的后代,所以</font>Dataform<font
face="宋体" lang="ZH-CN">是</font>AForm<font face="宋体" lang="ZH-CN">的后代,因此下面的赋值语句是合法的:</font></p>
<p>AForm :=DataForm;</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这一点在</font>Delphi<font face="宋体"
lang="ZH-CN">中是极为重要的。让我们来看一下应用程序调用事件处理过程的过程,下面是一个按钮部件的</font>OnClick<font
face="宋体" lang="ZH-CN">事件处理过程:</font></p>
<p>procedure TForm1.Button1Click(Sender:TObject);</p>
<p>begin</p>
<p>end;</p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 您可以看到</font>TObject<font
face="宋体" lang="ZH-CN">类在</font>Delphi<font face="宋体" lang="ZH-CN">的</font>Visual
Component Library<font face="宋体" lang="ZH-CN">的顶部,这就意味着所有的</font>Delphi<font
face="宋体" lang="ZH-CN">对象都是</font>TObject<font face="宋体" lang="ZH-CN">的后代。因为</font>Sender<font
face="宋体" lang="ZH-CN">是</font>TObject<font face="宋体" lang="ZH-CN">类型,所以任何对象都可以赋值给它。虽然您没有看见赋值的程序代码,但事实上发生事件的部件或控制部件已经赋给</font>Sender<font
face="宋体" lang="ZH-CN">了,这就是说</font>Sender<font face="宋体" lang="ZH-CN">的值是响应发生事件的部件或控制部件的。</font></p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 您可以使用保留字</font>is<font face="宋体"
lang="ZH-CN">来测试</font>Sender<font face="宋体" lang="ZH-CN">以便找到调用这个事件处理过程的部件或控制部件的类型。</font>Delphi<font
face="宋体" lang="ZH-CN">中的一个显示</font>drag-and-drop<font face="宋体"
lang="ZH-CN">的</font>DRAGDROP.DPR<font face="宋体" lang="ZH-CN">工程。加载它,可以查阅到</font>DROPFONT.PAS<font
face="宋体" lang="ZH-CN">库单元的代码,在</font>Memo1DragOver<font face="宋体"
lang="ZH-CN">方法中检查了一个对象变量的类型。在这种情形下,参数是</font>Source<font
face="宋体" lang="ZH-CN">而不是</font>Sender<font face="宋体" lang="ZH-CN">。 </p>
</font><p>procrdure TForm1.Memo1DragOver(SenderSource:TObject;X,Y:integer;</p>
<p>State:TDragState;var Accept:Boolean);</p>
<p>begin</p>
<p>Accept :=Source is TLabel;</p>
<p>end;  </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Source<font face="宋体" lang="ZH-CN">参数也是</font>TObject<font
face="宋体" lang="ZH-CN">类型,</font>Source<font face="宋体" lang="ZH-CN">被赋值为那个被拖曳的对象。用</font>Memo1DragOver<font
face="宋体" lang="ZH-CN">方法的目的是确保只有标签可以被拖曳。</font>Accept<font
face="宋体" lang="ZH-CN">是布尔型参数,如果</font>Accept<font face="宋体"
lang="ZH-CN">为</font>True<font face="宋体" lang="ZH-CN">,那么用户选择的部件可以被拖曳;反之当</font>Accept<font
face="宋体" lang="ZH-CN">的值为</font>False<font face="宋体" lang="ZH-CN">时,用户就不可以拖曳选择控制部件。</font>is<font
face="宋体" lang="ZH-CN">保留字检查</font>Source<font face="宋体" lang="ZH-CN">是否</font>TLabel<font
face="宋体" lang="ZH-CN">的类型,所以</font>Accept<font face="宋体" lang="ZH-CN">只有在用户拖曳一个标签时才为真,并作为变参输出到函数之外。</font></p>
<p><font face="宋体" lang="ZH-CN">下面的</font>drag-and-drop<font face="宋体"
lang="ZH-CN">展示的</font>Memo1DragDrop<font face="宋体" lang="ZH-CN">事件处理过程中也使用了</font>Source<font
face="宋体" lang="ZH-CN">参数。这个方法是为了把</font>Memo<font face="宋体"
lang="ZH-CN">部件的字型改变成和放入这个备注控制部件的标签一样的字型: </p>
</font><p>procedure TForm1.Memo1DragDrop(SenderSource:TObject;</p>
<p>X,Y:Integer);</p>
<p>begin</p>
<p>Memo1.Font := (Source as TLabel).Font; </p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当您在这个事件处理过程中编写赋值语句时,开发人员并不知道用户会放入哪一个标签,只有通过参考这个标签的名称</font>(Source
as TLabel)<font face="宋体" lang="ZH-CN">用户才能知道,并把标签类型赋给</font>Memo1.TFont<font
face="宋体" lang="ZH-CN">。</font>Source<font face="宋体" lang="ZH-CN">包含了用户拖放控制部件的名称,只有当</font>Source<font
face="宋体" lang="ZH-CN">是一个标签时,这个事件处理过程才允许这个赋值发生。</p>
<p>2.2.7 建立非可视化对象 </p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 您在</font>Delphi<font face="宋体"
lang="ZH-CN">中使用的大部分对象都是您在设计和运行期间可以看见的部件,例如编辑框、按钮等;一些部件,如通用对话框</font>(Common
dialog box)<font face="宋体" lang="ZH-CN">等,在设计时看不见,而在运行时可以看见;另外有些部件,例如计时器</font>(Timer)<font
face="宋体" lang="ZH-CN">、数据源</font>(Data Source)<font face="宋体"
lang="ZH-CN">部件等,在程序的运行期间没有任何可视化的显示,但您却可以在您的应用程序中使用它们。 </p>
</font><p>2.2.7.1<font face="宋体" lang="ZH-CN">说明一个非可视化对象 </p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面,通过一个简单的例子讲述如何建立自己的非可视化对象:</font></p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 您可以用如下的方法,建立一个自己的</font>TEmployee<font
face="宋体" lang="ZH-CN">非可视化对象: </p>
</font><p>type </p>
<p>Temployee = class(TObject);</p>
<p>Name := String[25];</p>
<p>Title := String[25];</p>
<p>HourlyPayRate : Double;</p>
<p>function CalculatePayAmount:Double;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这种情况下,</font>TEmployee<font
face="宋体" lang="ZH-CN">从</font>TObject<font face="宋体" lang="ZH-CN">继承下来,且包含三个域和一个方法。把您建立的类型说明放在库单元中的说明部分,并和窗体说明放在一起。在这个程序库单元的变量说明部分,说明一个新类型的变量: </p>
</font><p>var</p>
<p>Employee : TEmployee; </p>
<p>2.2.7.2<font face="宋体" lang="ZH-CN">用</font>Create<font face="宋体"
lang="ZH-CN">方法建立对象实例 </p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEmployee<font face="宋体"
lang="ZH-CN">只是一个对象类型。除非通过一个构造函数的调用从而被实例取代或创建,否则一个对象并不存储在内存中。构造函数是一个方法,它为新对象配置内存并且指向这个新的对象。这个新的对象也被称为这个对象类型的一个实例。</font></p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立一个对象的实例,需要调用</font>Create<font
face="宋体" lang="ZH-CN">方法,然后构造函数把这个实例赋给一个变量。如果您想说明一个</font>TEmployee<font
face="宋体" lang="ZH-CN">类型的实例,在您访问这个对象的任何域之前,您的程序代码必须调用</font>Create<font
face="宋体" lang="ZH-CN">。</p>
</font><p>Employee := TEmployee.Create; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Create<font face="宋体" lang="ZH-CN">方法并没有在</font>TEmployee<font
face="宋体" lang="ZH-CN">类型中说明,它继承自</font>TObject<font face="宋体"
lang="ZH-CN">类型。因为</font>TEmployee<font face="宋体" lang="ZH-CN">是</font>TObject<font
face="宋体" lang="ZH-CN">的子类,所以它可以调用</font>Create<font
face="宋体" lang="ZH-CN">方法而创建一个</font>TEmployee<font face="宋体"
lang="ZH-CN">实例。然后把它赋给</font>Employee<font face="宋体" lang="ZH-CN">变量。在创建了一个这样的对象后,您就可以象使用其他的</font>Delphi<font
face="宋体" lang="ZH-CN">对象一样访问</font>Employee<font face="宋体"
lang="ZH-CN">对象了。 </p>
</font><p>2.2.7.3 <font face="宋体" lang="ZH-CN">撤销对象 </p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当您使用完对象后,您应该及时撤销它,以便把这个对象占用的内存释放出来。您可以通过调用一个注销方法来撤销您的对象,它会释放分配给这个对象的内存。</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delphi<font face="宋体" lang="ZH-CN">的注销方法有两个:</font>Destroy<font
face="宋体" lang="ZH-CN">和</font>Free<font face="宋体" lang="ZH-CN">。</font>Delphi<font
face="宋体" lang="ZH-CN">建议使用</font>Free<font face="宋体" lang="ZH-CN">,因为它比</font>Destroy<font
face="宋体" lang="ZH-CN">更为安全,同时调用</font>Free<font face="宋体"
lang="ZH-CN">会生成效率更高的代码。</font></p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 您可以用下列的语句释放用完的</font>Employee<font
face="宋体" lang="ZH-CN">对象: </p>
</font><p>Employee.Free; </p>
<p><font face="宋体" lang="ZH-CN">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 和</font>Create<font
face="宋体" lang="ZH-CN">方法一样,</font>Free<font face="宋体" lang="ZH-CN">方法也是</font>TEmployee<font
face="宋体" lang="ZH-CN">从</font>TObject<font face="宋体" lang="ZH-CN">中继承过来的。把您的注销放在</font>try<font
face="宋体" lang="ZH-CN">…</font>finally<font face="宋体" lang="ZH-CN">程序模块的</font>finally<font
face="宋体" lang="ZH-CN">部分,而把对象的程序代码放在</font>try<font
face="宋体" lang="ZH-CN">部分是编程的好习惯。这样,即使您的程序代码在使用对象时发生了异常事件,也会确保您为这个对象分配的内存会被释放。关于异常处理和</font>try<font
face="宋体" lang="ZH-CN">…</font>finally<font face="宋体" lang="ZH-CN">程序模块的信息以及建立非可视化对象的例子,在后文中还将仔细讲述。</font></p>
<BR>
<hr color="#EE9B73" size="1" width="94%">

</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%"  background="bg.gif"><strong><A HREF="010.htm" ><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR>
<A HREF="008.htm" ><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR>

<A HREF="index.html" ><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR>
<A HREF="../../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首页</font></A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>

⌨️ 快捷键说明

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