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

📄 022.htm

📁 delphi教程
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<p>  </font>TAutoObject <font face="宋体" lang="ZH-CN">是</font>Delphi<font
face="宋体" lang="ZH-CN">自动化服务器中所有对象的基类,任何自动化对象都是从</font>TAutoObject<font
face="宋体" lang="ZH-CN">类派生出来的。</p>
<p>  </font>OLE<font face="宋体" lang="ZH-CN">对象的定义与其它类的定义类似。它的</font>automated<font
face="宋体" lang="ZH-CN">部分象普通类的</font>public<font face="宋体"
lang="ZH-CN">部分,</font>OLE<font face="宋体" lang="ZH-CN">控制器可引用在这部分声明的属性和方法。编译器把</font>automated<font
face="宋体" lang="ZH-CN">部分创建成</font>OLE<font face="宋体" lang="ZH-CN">自动化对象的入口。但</font>automated<font
face="宋体" lang="ZH-CN">部分的代码有很多限制:</p>
<p>  ●</font> <font face="宋体" lang="ZH-CN">属性方法可以定义,但不能定义域;</p>
<p>  ●</font> <font face="宋体" lang="ZH-CN">所有属性、参数、函数类型必须是以下类型之一: </p>
<p>  </font>SmallInt,Integer,Single,Double,Currency,TDateTime,String,WordBool, Varint </p>
<p><font face="宋体" lang="ZH-CN">●</font> <font face="宋体" lang="ZH-CN">属性声明只能包括访问定义符</font>(read
and Write)<font face="宋体" lang="ZH-CN">,其它定义符如</font>index,stored, </p>
<p>default,odefault<font face="宋体" lang="ZH-CN">均不能使用;</p>
<p>  ●</font> <font face="宋体" lang="ZH-CN">访问定义符必须列出相应的方法标识符,不能使用域标识符;</p>
<p>  ●</font> <font face="宋体" lang="ZH-CN">支持数组类型;</p>
<p>  ●</font> <font face="宋体" lang="ZH-CN">不允许属性重载;</p>
<p>  ●</font> <font face="宋体" lang="ZH-CN">方法是可以是虚拟的,但不能是动态的,允许方法重载。</p>
<p>  在</font>EditFrom<font face="宋体" lang="ZH-CN">单元中定义了</font>TMemoDoc<font
face="宋体" lang="ZH-CN">类: </p>
<p>  </font>type</p>
<p>TMemoDoc = Class(TAutoObject)</p>
<p>private</p>
<p>FEditForm : TEditForm;</p>
<p>funtion CretFileName : String;</p>
<p>funtion CretModiFied : WordBool;</p>
<p>procedure SetFileName(Const Value : String);</p>
<p>automated</p>
<p>procedure Clear;</p>
<p>procedure Ineart(Const Text : String);</p>
<p>procedure Save;</p>
<p>procedure Close;</p>
<p>procedure FileName : String read GretFileName write</p>
<p>SetFileName;</p>
<p>procedure Modified : WordBool read GretModified</p>
<p>end; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TMemeDoc<font face="宋体" lang="ZH-CN">类是</font>MemoEdit<font
face="宋体" lang="ZH-CN">程序的内部自动化类,因此不需要注册。外部</font>OLE<font
face="宋体" lang="ZH-CN">自动化控制器对它不能直接引用。如果要使外部控制器对自动化对象进行操作,则要在声明自动化对象的单元中调用</font>Automation.
RegisterClass <font face="宋体" lang="ZH-CN">进行注册。例程</font>MemoAuto <font
face="宋体" lang="ZH-CN">单元定义了</font>TMemoApp<font face="宋体" lang="ZH-CN">对象并进行注册。 </p>
<p>  </font>unit MemoAuto</p>
<p><font face="宋体" lang="ZH-CN"> </font> <font face="宋体" lang="ZH-CN">…</font></p>
<p>type</p>
<p>TMemoApp = Class(TAutoObject)</p>
<p>implementation</p>
<p><font face="宋体" lang="ZH-CN">…</p>
<p>  </font>procedure RegisterMemoApp</p>
<p>Const</p>
<p>AutoClassInfo : TAutoClassInfo = (</p>
<p>AutoClass : TMemoApp;</p>
<p>ProgID : MemoEdit,Application</p>
<p>ClassIn : '{FIFF4880 - 200D - 11CF - BDCF - D020AFOE5B81}';</p>
<p>Description : 'Memo Editor Application';</p>
<p>Instancing : acSingle Instance );</p>
<p>begin</p>
<p>Automation,RegisterClass(AutoClassInfo)</p>
<p>end;</p>
<p>inibialization</p>
<p>RegisterMemoApp;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自动化对象要在</font>initialization<font
face="宋体" lang="ZH-CN">部分中对自动化对象进行注册。</font> <font
face="宋体" lang="ZH-CN">注册的信息用以唯一辨识服务器对象。把一个自动化对象加入到服务器中要用到这些信息。程序一旦注册了自动化对象,全局自动化对象将用</font>OLE<font
face="宋体" lang="ZH-CN">自动化</font>API<font face="宋体" lang="ZH-CN">进行自动管理。</p>
<p>  注册后的</font>OLE<font face="宋体" lang="ZH-CN">自动化对象是引用记数的,因为对象可能被多个控制器控制。当使用完一个</font>OLE<font
face="宋体" lang="ZH-CN">对象,调用</font>Release<font face="宋体" lang="ZH-CN">方法,</font>Release<font
face="宋体" lang="ZH-CN">可减少引用数目,当引用数目为零时,调用</font>Free<font
face="宋体" lang="ZH-CN">方法释放对象。</p>
<p>  通常把</font>OLE<font face="宋体" lang="ZH-CN">对象作为变体类型</font>(variants)<font
face="宋体" lang="ZH-CN">进行输出,任何</font>OLE <font face="宋体"
lang="ZH-CN">对象的方法和属性必须返回一个包含</font>OLE<font face="宋体"
lang="ZH-CN">对象的变体类型,</font>TAutoObject<font face="宋体" lang="ZH-CN">提供了一个变体类型的</font>OLEObject<font
face="宋体" lang="ZH-CN">属性。控制器不能直接得到服务器中的类或指针,而是引用</font>OLE<font
face="宋体" lang="ZH-CN">对象的</font>OLEObject<font face="宋体" lang="ZH-CN">属性。</p>
<p>  例程</font>MemoAuto<font face="宋体" lang="ZH-CN">单元的</font>NewMemo<font
face="宋体" lang="ZH-CN">函数就是通过引用</font>OLEObject <font face="宋体"
lang="ZH-CN">属性而提供引用</font>TMemoDoc<font face="宋体" lang="ZH-CN">对象的接口。 </p>
<p>  </font>function TMemoApp,NewMemo : Variant;</p>
<p>begin</p>
<p>Result := MainForm,CreateMemo(' '),OleObject;</p>
<p>end; </p>
<p>8.4.2 <font face="宋体" lang="ZH-CN">创建</font>OLE<font face="宋体" lang="ZH-CN">自动化服务器 </p>
<p>  </font>OLE<font face="宋体" lang="ZH-CN">自动化服务器是应用程序或动态链接库</font>(DLL)<font
face="宋体" lang="ZH-CN">,它可向</font>OLE <font face="宋体" lang="ZH-CN">自动化控制器输出</font>OLE<font
face="宋体" lang="ZH-CN">对象。</font> MemoEditdpr <font face="宋体" lang="ZH-CN">就是</font>OLE
<font face="宋体" lang="ZH-CN">自动化服务器,</font> <font face="宋体"
lang="ZH-CN">在</font>MemoAuto <font face="宋体" lang="ZH-CN">单元中注册了</font>MemoEdit.Appdication<font
face="宋体" lang="ZH-CN">自动化类,所有</font>OLE<font face="宋体" lang="ZH-CN">控制器均可对</font>MemoEdit.Application<font
face="宋体" lang="ZH-CN">进行引用。</font></p>
<font face="宋体" lang="ZH-CN"><p>  在</font>Windows<font face="宋体"
lang="ZH-CN">环境下有两种</font>OLE<font face="宋体" lang="ZH-CN">自动化服务器,进程内服务器和进程外服务器,</font>
Delphi<font face="宋体" lang="ZH-CN">可创建这两种服务器。</font></p>
<font face="宋体" lang="ZH-CN"><p>  进程内服务器是输出</font>OLE<font
face="宋体" lang="ZH-CN">自动化对象的动态链接库。因为</font>OLE<font
face="宋体" lang="ZH-CN">自动化对象来自于</font>DLL<font face="宋体"
lang="ZH-CN">,</p>
<p>对象是控制器程序的同一窗体进程,进程内服务器适合于创建共享的程序模块,</font>
<font face="宋体" lang="ZH-CN">而这个模块可以被用不同语言编写的多个程序所共享。</font>
<font face="宋体" lang="ZH-CN">进程内服务器被调用时在同一地址中运行,这样就不需要控制器进行调度,以避免处理大量的消息句柄。</font>
<font face="宋体" lang="ZH-CN">进程外服务器是能输出</font>OLE<font
face="宋体" lang="ZH-CN">自动化对象的应用程序。</p>
<p>  有些</font>OLE<font face="宋体" lang="ZH-CN">自动化服务器只能创建和输出一个</font>OLE<font
face="宋体" lang="ZH-CN">对象,有些服务器则可以处理多个</font>OLE<font
face="宋体" lang="ZH-CN">对象,另外一些服务器不能输出</font>OLE<font
face="宋体" lang="ZH-CN">对象,只能在程序内部使用</font>OLE<font
face="宋体" lang="ZH-CN">对象。</font> <font face="宋体" lang="ZH-CN">服务器与其能输出的对象数目的关系称为实例</font>(instancing)<font
face="宋体" lang="ZH-CN">。</font></p>
<font face="宋体" lang="ZH-CN"><p>  在创建</font>OLE <font face="宋体"
lang="ZH-CN">自动化对象时必须定义实例,</font> <font face="宋体"
lang="ZH-CN">这样,</font> <font face="宋体" lang="ZH-CN">在创建一个</font>OLE <font
face="宋体" lang="ZH-CN">自动化对象时,</font>Windows<font face="宋体"
lang="ZH-CN">就能决定是否创建一个新的服务器实例。表</font>8.5<font
face="宋体" lang="ZH-CN">列出三种实例类型。</font></p>
<p><font face="宋体" lang="ZH-CN">表</font>8.6 <font face="宋体" lang="ZH-CN">实例的取值及含义</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</font>
</p>
<p>instancing<font face="宋体" lang="ZH-CN">类型 </font> <font face="宋体"
lang="ZH-CN">        含义</font></p>
<p><font face="宋体" lang="ZH-CN">───────────────────────────────</font>
<font face="宋体" lang="ZH-CN">───────</font></p>
<p>internal OLE<font face="宋体" lang="ZH-CN">对象是应用程序的内部对象,对象不需要注册,外部进程不能创</p>
<p>         </font> <font face="宋体" lang="ZH-CN">建此对象</font></p>
<p>Single <font face="宋体" lang="ZH-CN">每个服务器实例只能输出一个</font>OLE<font
face="宋体" lang="ZH-CN">对象实例,</font> <font face="宋体" lang="ZH-CN">若控制器需要多个</font>OLE</p>
<p> </p>
<font face="宋体" lang="ZH-CN"><p>         </font> <font face="宋体"
lang="ZH-CN">对象实例,</font>WIndows<font face="宋体" lang="ZH-CN">为第一个</font>OLE<font
face="宋体" lang="ZH-CN">对象创建一个服务器实例</font></p>
<p>Multiple <font face="宋体" lang="ZH-CN">一个服务器能创建和输出多个</font>OLE
<font face="宋体" lang="ZH-CN">对象实例,</font> <font face="宋体" lang="ZH-CN">进程内服务器大多是</p>
<p>         </font>Multiple<font face="宋体" lang="ZH-CN">类型</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p>  每个使用</font>OLEAuto<font face="宋体" lang="ZH-CN">单元的工程文件自动地拥有一个叫</font>Automation<font
face="宋体" lang="ZH-CN">的对象,它是非可视对象。就象</font>Application<font
face="宋体" lang="ZH-CN">部件拥有</font>Delphi<font face="宋体" lang="ZH-CN">应用程序的一些信息一样,</font>Automation<font
face="宋体" lang="ZH-CN">对象也拥有服务器的一些信息,其中最重要的是</font>StartMode<font
face="宋体" lang="ZH-CN">属性和</font>OnLastRelease<font face="宋体" lang="ZH-CN">事件。</p>
<p>  </font>StartMode<font face="宋体" lang="ZH-CN">指示</font>OLE<font
face="宋体" lang="ZH-CN">自动化服务器打开方式打开的目的。表</font>8.7<font
face="宋体" lang="ZH-CN">列出</font>StartMode<font face="宋体" lang="ZH-CN">四种取值。 </p>
</font><p><font face="宋体" lang="ZH-CN">表</font>8.7 StartMode <font face="宋体"
lang="ZH-CN">的取值及含义</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>  取值       </font> <font face="宋体" lang="ZH-CN">  含义</font></p>
<p><font face="宋体" lang="ZH-CN">───────────────────────────────</p>
<p>  </font>SmStandAlone <font face="宋体" lang="ZH-CN">用户启动应用程序</p>
<p>  </font>SmAutomation Windows<font face="宋体" lang="ZH-CN">为创建</font>OLE<font

⌨️ 快捷键说明

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