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

📄 019.htm

📁 Delphi基础知识讲座
💻 HTM
📖 第 1 页 / 共 4 页
字号:
face="宋体" lang="ZH-CN">赋给</font>Image<font face="宋体" lang="ZH-CN">部件的相应值,使用户可以对剪贴板上的位图进行观察。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 消息响应过程</font>WMChangeCBChain<font
face="宋体" lang="ZH-CN">在剪贴板观察器链上其它观察器退出时被调用。根据被移出观察器的不同位置决定了不同的处理方法。</p>
</font><p>procedure TClipSaveForm.WMChangeCBChain(var Msg: TWMChangeCBChain);</p>
<p>begin</p>
<p>if Msg.Remove = NextViewerHandle then</p>
<p>NextViewerHandle := Msg.Next</p>
<p>else</p>
<p>if NextViewerHandle &lt;&gt; 0 then</p>
<p>SendMessage(NextViewerHandle,Msg.Msg,Msg.Remove,Msg.Next);</p>
<p>Msg.Result := 0;</p>
<p>end;</p>
<p><font face="宋体" lang="ZH-CN">窗口上有两个加速按钮,两个按钮。它们击键</font>(click)<font
face="宋体" lang="ZH-CN">事件处理过程如下。每一程序段的意义是非常显然的。 </p>
</font><p>procedure TClipSaveForm.Button1Click(Sender: TObject);</p>
<p>begin</p>
<p>Close;</p>
<p>end;</p>
<p>procedure TClipSaveForm.Button2Click(Sender: TObject);</p>
<p>begin</p>
<p>WindowState := wsMinimized;</p>
<p>end;</p>
<p>procedure TClipSaveForm.SpeedButton1Click(Sender: TObject);</p>
<p>begin</p>
<p>View := True;</p>
<p>Image1.Picture.Bitmap := MyBitmap;</p>
<p>end; </p>
<p>procedure TClipSaveForm.SpeedButton2Click(Sender: TObject);</p>
<p>begin</p>
<p>View := False;</p>
<p>Image1.Picture.Bitmap := nil;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">通过对这个程序的介绍,以下几点是应该注意的:</p>
</font><p>1.<font face="宋体" lang="ZH-CN">提供了一种自己截获和处理剪贴板上内容的方法。读者可以根据需要进一步扩充;</p>
</font><p>2.<font face="宋体" lang="ZH-CN">提供了响应</font>Windows<font
face="宋体" lang="ZH-CN">消息的方法。在第三篇有关自定义部件开发的内容中,这一问题还要详细论述;</p>
</font><p>3.<font face="宋体" lang="ZH-CN">最后的一点启示是:在</font>Delphi<font
face="宋体" lang="ZH-CN">程序开发中巧妙应用传统的</font>Windows<font
face="宋体" lang="ZH-CN">方法</font>(<font face="宋体" lang="ZH-CN">如消息处理、</font>
API<font face="宋体" lang="ZH-CN">函数等</font>)<font face="宋体" lang="ZH-CN">仍是很有必要的。而在应用这些方法中所体现的方便之处,正是</font>Delphi<font
face="宋体" lang="ZH-CN">胜过其它可视化开发工具的一个重要方面。 </p>
</font><p>7.2 Windows<font face="宋体" lang="ZH-CN">的</font>DDE<font face="宋体"
lang="ZH-CN">原理和</font> Dephi<font face="宋体" lang="ZH-CN">的</font>DDE<font
face="宋体" lang="ZH-CN">实现机制 </p>
</font><p>7.2.1 Windows<font face="宋体" lang="ZH-CN">的</font>DDE<font face="宋体"
lang="ZH-CN">原理 </p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Windows<font face="宋体"
lang="ZH-CN">的</font>DDE<font face="宋体" lang="ZH-CN">机制基于</font>Windows<font
face="宋体" lang="ZH-CN">的消息机制。两个</font>Windows<font face="宋体"
lang="ZH-CN">应用程序通过相互之间传递</font>DDE<font face="宋体"
lang="ZH-CN">消息进行</font>DDE<font face="宋体" lang="ZH-CN">会话</font>(Conversation)<font
face="宋体" lang="ZH-CN">,从而完成数据的请求、应答、传输。这两个应用程序分别称为服务器</font>(Server)<font
face="宋体" lang="ZH-CN">和客户</font>(Client)<font face="宋体" lang="ZH-CN">。服务器是数据的提供者,客户是数据的请求和接受者。</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DDE<font face="宋体" lang="ZH-CN">会话由客户程序启动。客户程序把一条消息</font>(WM_DDE_INITIATE)<font
face="宋体" lang="ZH-CN">传播给当前运行的所有</font>Windows<font face="宋体"
lang="ZH-CN">程序。这条消息指明了客户程序所需要的一般数据</font>(<font
face="宋体" lang="ZH-CN">应用程序、主题</font>)<font face="宋体" lang="ZH-CN">。拥有这些数据的</font>DDE<font
face="宋体" lang="ZH-CN">服务器可以响应这条被传播的消息。此时,</font>DDE<font
face="宋体" lang="ZH-CN">会话就开始了。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于在每个主题中,</font>DDE<font
face="宋体" lang="ZH-CN">服务器可以支持一个或多个数据项,所以在客户请求数据时应同时指明应用程序名、主题名和项目名。应用程序、主题、项目是</font>DDE<font
face="宋体" lang="ZH-CN">中三个最基本的概念。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 利用</font>Windows<font face="宋体"
lang="ZH-CN">本身提供的</font>DDE<font face="宋体" lang="ZH-CN">消息和</font>API<font
face="宋体" lang="ZH-CN">进行</font>DDE<font face="宋体" lang="ZH-CN">编程是一件相当棘手的问题。</font>
<font face="宋体" lang="ZH-CN">虽然使用</font>DDE<font face="宋体" lang="ZH-CN">管理库</font>(ddeml.dll)<font
face="宋体" lang="ZH-CN">可以一定程度上减轻开发者的工作负担,但开发</font>DDE<font
face="宋体" lang="ZH-CN">程序仍不是一件轻松的事情。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此时</font>Delphi<font face="宋体"
lang="ZH-CN">出现了!</font>Delphi<font face="宋体" lang="ZH-CN">通过其自身巧妙的设计使开发一个</font>DDE<font
face="宋体" lang="ZH-CN">应用程序同开发一个普通程序一样地快捷、方便。 </p>
</font><p>7.2.2 Delphi<font face="宋体" lang="ZH-CN">的</font>DDE<font face="宋体"
lang="ZH-CN">实现机制简介 </p>
</font><p>Delphi<font face="宋体" lang="ZH-CN">把所有的</font>DDE<font face="宋体"
lang="ZH-CN">功能做到四个部件中,它们是</font>:</p>
<p><font face="宋体" lang="ZH-CN">●</font> TDDEClientConv <font face="宋体"
lang="ZH-CN">:</font> <font face="宋体" lang="ZH-CN">用于客户程序建立和维护一个</font>DDE<font
face="宋体" lang="ZH-CN">会话</p>
<p>●</font> TDDEClientItem <font face="宋体" lang="ZH-CN">:</font> <font
face="宋体" lang="ZH-CN">用于客户程序建立和维护数据交换通道</p>
<p>●</font> TDDEServerConv <font face="宋体" lang="ZH-CN">:</font> <font
face="宋体" lang="ZH-CN">用于服务器程序响应</font>DDE<font face="宋体"
lang="ZH-CN">会话</p>
<p>●</font> TDDEServerItem <font face="宋体" lang="ZH-CN">:</font> <font
face="宋体" lang="ZH-CN">用于服务器程序维护数据交换通道 </p>
<p>  前两个部件用于生成一个</font>DDE<font face="宋体" lang="ZH-CN">客户程序,后两个部件用于生成一个</font>DDE<font
face="宋体" lang="ZH-CN">服务器程序。如果一个应用程序同时拥有这些部件,则这一程序既可以充当</font>DDE<font
face="宋体" lang="ZH-CN">客户,也可以充当</font>DDE<font face="宋体"
lang="ZH-CN">服务器。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会话部件</font>TDDEClientConv<font
face="宋体" lang="ZH-CN">、</font>TDDEServerConv<font face="宋体" lang="ZH-CN">用于建立和维护一个</font>DDE<font
face="宋体" lang="ZH-CN">会话。</font>DDE<font face="宋体" lang="ZH-CN">会话包括</font>DDE<font
face="宋体" lang="ZH-CN">服务和</font>DDE<font face="宋体" lang="ZH-CN">主题两部分。</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DDE<font face="宋体" lang="ZH-CN">服务是</font>DDE<font
face="宋体" lang="ZH-CN">服务器的名称,即在一般的</font>Windows DDE<font
face="宋体" lang="ZH-CN">机制中所讲的应用程序名。一般说来这一名称是</font>DDE<font
face="宋体" lang="ZH-CN">服务器应用程序执行文件名去掉</font> .EXE<font
face="宋体" lang="ZH-CN">后缀。比如你的应用程序要和</font>Word 6.0<font
face="宋体" lang="ZH-CN">建立会话,则</font>DDE<font face="宋体" lang="ZH-CN">服务为</font>WINWORD<font
face="宋体" lang="ZH-CN">。但也不尽然。比如你的应用程序要和</font>Borland
ReportSmith ( RPTSMITH.EXE ) <font face="宋体" lang="ZH-CN">建立会话,则</font>DDE
<font face="宋体" lang="ZH-CN">服务为</font> Report Smith<font face="宋体"
lang="ZH-CN">。</font>DDE<font face="宋体" lang="ZH-CN">服务到底如何,读者可参看相关的</font>DDE<font
face="宋体" lang="ZH-CN">服务器应用程序文档。</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DDE<font face="宋体" lang="ZH-CN">主题是一个包含了联接信息的数据单元。一般说来</font>DDE
<font face="宋体" lang="ZH-CN">主题是一个包括扩展名的完整文件名。例如和</font>Excel<font
face="宋体" lang="ZH-CN">中的一个文件建立</font>DDE<font face="宋体"
lang="ZH-CN">会话,则主题可能是 </p>
</font><p>Topic = 'c:\excel\Example\sale.xls' </p>
<p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果服务器是一个</font>Delphi<font
face="宋体" lang="ZH-CN">应用程序,缺省情况下主题是包含欲联接数据窗体的标题。如果服务器使用了</font>DDEServerConv<font
face="宋体" lang="ZH-CN">部件,则要求使用部件</font>DDEServerConv<font
face="宋体" lang="ZH-CN">的名称作为</font>DDE<font face="宋体" lang="ZH-CN">主题。</p>
</font><p><font face="宋体" lang="ZH-CN">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 项目部件</font>TDDEclientItem<font
face="宋体" lang="ZH-CN">、</font>TDDEServerItem<font face="宋体" lang="ZH-CN">用于建立和维护</font>DDE<font
face="宋体" lang="ZH-CN">数据的传输通道。</font> DDE<font face="宋体"
lang="ZH-CN">项目中包含着实际欲传输的数据。</font>DDE<font face="宋体"
lang="ZH-CN">项目的格式取决于</font>DDE<font face="宋体" lang="ZH-CN">服务器应用程序。一个可能的</font>DDE<font
face="宋体" lang="ZH-CN">项目例子是电子表格中的单元和数据库表中的域。如果服务器是</font>Delphi<font
face="宋体" lang="ZH-CN">应用程序,则项目是连接的</font> DDEServerItem<font
face="宋体" lang="ZH-CN">部件的名称。</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Delphi<font face="宋体"
lang="ZH-CN">的</font>DDE<font face="宋体" lang="ZH-CN">实现机制方便、实用,但也有一个令人遗憾的缺陷:只能传输文本数据以及命令、宏,而不能传输图像数据。在这一点上微软公司推出的</font>Visual
Basic <font face="宋体" lang="ZH-CN">要略胜一筹。不过在目前文本数据的使用仍是最广泛的,而且图像传输可以利用剪贴板和</font>OLE<font
face="宋体" lang="ZH-CN">来实现,则这一缺陷也并无很大的影响 </p>
</font><p align="center">7.3 DDE<font face="宋体" lang="ZH-CN">客户程序的实现</p>
</font><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DDE<font face="宋体" lang="ZH-CN">客户程序启动</font>DDE<font
face="宋体" lang="ZH-CN">会话,向服务器请求并从服务器接收数据。同时还可以向服务器发送数据、命令、宏,改变服务器的状态并控制服务器的运行。 </p>
</font><p>7.3.1 <font face="宋体" lang="ZH-CN">联接模式</font>(ConnectMode)</p>
<font face="宋体" lang="ZH-CN"><p>  </font>Delphi<font face="宋体" lang="ZH-CN">的</font>DDE<font
face="宋体" lang="ZH-CN">提供了两种联接模式:自动和人工。这可以通过</font>DDEClinetConv
<font face="宋体" lang="ZH-CN">部件的</font>ConnectMode<font face="宋体"
lang="ZH-CN">属性进行设置。如下表所示。 </p>
</font><p><font face="宋体" lang="ZH-CN">表</font> 7.5 DDE<font face="宋体"
lang="ZH-CN">的联接模式</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>     值           意      义</font></p>
<p><font face="宋体" lang="ZH-CN">───────────────────────────────</p>
<p>   </font>ddeAutomatic <font face="宋体" lang="ZH-CN">在运行中当包含</font>TDDEClientConv<font
face="宋体" lang="ZH-CN">部件的窗口创建时</font></p>
<p><font face="宋体" lang="ZH-CN">联接自动建立</p>
<p>   </font>ddeManual <font face="宋体" lang="ZH-CN">只有当调用</font>OpenLink<font
face="宋体" lang="ZH-CN">方法时联接才建立</font></p>
<p><font face="宋体" lang="ZH-CN">━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━   </p>
<p>不同联接模式,</font>DDE<font face="宋体" lang="ZH-CN">客户程序的实现方式不同。</p>
<p>对于自动模式:</p>
</font><p>1. <font face="宋体" lang="ZH-CN">向窗体中加入</font>DDEClientConv<font
face="宋体" lang="ZH-CN">和</font>DDEClientItem<font face="宋体" lang="ZH-CN">部件并命名;</p>
</font><p>2. <font face="宋体" lang="ZH-CN">把</font>DDEClientItem<font face="宋体"
lang="ZH-CN">部件的</font>DdeConv<font face="宋体" lang="ZH-CN">属性设置为</font>DDEClientConv<font
face="宋体" lang="ZH-CN">部件的名称;</p>
<p>如果在设计时建立,则通过对象观察器进行选择;如果在运行时建立联系,</font>
<font face="宋体" lang="ZH-CN">则通过如下的一条语句设置属性的值: </p>
</font><p>DDEClientItem1.DdeConv := 'DDEClientConv1' ; </p>
<p>3. <font face="宋体" lang="ZH-CN">和服务器建立联系,实现数据共享。</p>
<p>对于人工模式:</p>

⌨️ 快捷键说明

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