📄 019.htm
字号:
</font><p>1.<font face="宋体" lang="ZH-CN">向窗体中加入</font>DDEClientConv<font
face="宋体" lang="ZH-CN">部件;</p>
</font><p>2.<font face="宋体" lang="ZH-CN">和服务器建立联系;</p>
</font><p>3. <font face="宋体" lang="ZH-CN">数据更新时调用</font>RequestData<font
face="宋体" lang="ZH-CN">方法申请并获得数据。 </p>
</font><p>7.3.2 <font face="宋体" lang="ZH-CN">和</font>DDE<font face="宋体"
lang="ZH-CN">服务器建立联系 </p>
</font><p><font face="宋体" lang="ZH-CN">
和</font>DDE<font face="宋体"
lang="ZH-CN">服务器建立联系,既可以在设计时进行,也可以在运行时进行。</p>
</font><p><font face="宋体" lang="ZH-CN">
在设计时,</font>DDE<font
face="宋体" lang="ZH-CN">联接可以通过剪贴板进行粘贴。具体步骤如下:</p>
</font><p>1. <font face="宋体" lang="ZH-CN">激活服务器程序,并选中你的客户程序欲联接的数据;</p>
</font><p>2. <font face="宋体" lang="ZH-CN">把数据和</font>DDE<font face="宋体"
lang="ZH-CN">联接信息拷贝到剪贴板上。一般说来这只需要选择服务器应用程序的</font>
Edit|Copy <font face="宋体" lang="ZH-CN">菜单;</p>
</font><p>3. <font face="宋体" lang="ZH-CN">在</font>Delphi IDE<font face="宋体"
lang="ZH-CN">的设计窗体中选中</font>DDEClientConv<font face="宋体" lang="ZH-CN">部件;</p>
</font><p>4. <font face="宋体" lang="ZH-CN">在</font>Object Inspector(<font
face="宋体" lang="ZH-CN">对象观察器</font>)<font face="宋体" lang="ZH-CN">中单击</font>DDEService<font
face="宋体" lang="ZH-CN">属性或</font>DDETopic<font face="宋体" lang="ZH-CN">属性,然后再单击</font>Ellipsis<font
face="宋体" lang="ZH-CN">按钮,打开</font>DDE Info<font face="宋体" lang="ZH-CN">对话框;</p>
</font><p>5.<font face="宋体" lang="ZH-CN">选择</font>Paste Link<font face="宋体"
lang="ZH-CN">按钮。此时</font>App<font face="宋体" lang="ZH-CN">编辑框和</font>Topic<font
face="宋体" lang="ZH-CN">编辑框被自动填充。如果</font>Paste Link<font
face="宋体" lang="ZH-CN">按钮变灰,说明你准备用作服务器的应用程序不支持</font>DDE<font
face="宋体" lang="ZH-CN">或者</font>DDE<font face="宋体" lang="ZH-CN">信息没有被成功地拷贝到剪贴板上;</p>
</font><p>6.<font face="宋体" lang="ZH-CN">选择</font>OK <font face="宋体"
lang="ZH-CN">按钮。此时</font>Object Inspector<font face="宋体" lang="ZH-CN">中的</font>DDEService<font
face="宋体" lang="ZH-CN">、</font>DDETopic <font face="宋体" lang="ZH-CN">属性包含了建立一个</font>DDE<font
face="宋体" lang="ZH-CN">联接的正确值。</p>
<p>对于人工模式以下步骤是不需要的。</p>
</font><p>7.<font face="宋体" lang="ZH-CN">选中</font>DDEClientItem<font face="宋体"
lang="ZH-CN">部件,并在</font>Object Inspector<font face="宋体" lang="ZH-CN">中设置</font>DdeConv<font
face="宋体" lang="ZH-CN">属性为已完成联接的</font>DDEClientConv<font
face="宋体" lang="ZH-CN">部件名称;</p>
</font><p>8.<font face="宋体" lang="ZH-CN">假如剪贴板上的</font>DDE <font
face="宋体" lang="ZH-CN">联接信息仍保留的话,从</font>Object Inspector<font
face="宋体" lang="ZH-CN">的下拉列表框中选择</font> DDEItem <font face="宋体"
lang="ZH-CN">属性的值。否则输入正确的值。</p>
<p>在运行时,调用</font> SetLink <font face="宋体" lang="ZH-CN">方法来建立</font>DDE<font
face="宋体" lang="ZH-CN">联接。</p>
</font><p> SetLink<font face="宋体"
lang="ZH-CN">有两个</font>String<font face="宋体" lang="ZH-CN">类型的参数,分别用来接受</font>DDEService<font
face="宋体" lang="ZH-CN">和</font>DDETopic<font face="宋体" lang="ZH-CN">的值。过程执行后</font>DDEClientConv<font
face="宋体" lang="ZH-CN">部件的</font>DDEService <font face="宋体" lang="ZH-CN">和</font>DDeTopic<font
face="宋体" lang="ZH-CN">属性被设置。要注意的是:在运行时直接设置</font>DDEService<font
face="宋体" lang="ZH-CN">和</font>DDETopic<font face="宋体" lang="ZH-CN">的值并不能建立一个</font>DDE<font
face="宋体" lang="ZH-CN">联接,而必须调用</font>SetLink <font face="宋体"
lang="ZH-CN">方法进行初始化。</p>
</font><p><font face="宋体" lang="ZH-CN">
比如,下面的语句和</font>Excel<font
face="宋体" lang="ZH-CN">的</font>System<font face="宋体" lang="ZH-CN">主题建立联接: </p>
</font><p>DDEClietnConv. SetLink('Excel','System')<font face="宋体" lang="ZH-CN">; </p>
</font><p><font face="宋体" lang="ZH-CN">
调用</font>SetLink<font face="宋体"
lang="ZH-CN">方法后,还需要设置</font>DDEClientItem<font face="宋体"
lang="ZH-CN">部件的</font>DDEItem<font face="宋体" lang="ZH-CN">属性。</p>
</font><p><font face="宋体" lang="ZH-CN">
比如,下面的语句联接</font>Excel<font
face="宋体" lang="ZH-CN">的</font>Topics<font face="宋体" lang="ZH-CN">项目,用以获取当前活跃文件的文件名: </p>
</font><p>DDEClietnItem.DDEItem := 'Topics'; </p>
<p><font face="宋体" lang="ZH-CN"> 当</font>DDE<font
face="宋体" lang="ZH-CN">联接建立后,联接的数据保存在</font>DDEClientItem<font
face="宋体" lang="ZH-CN">部件的</font>Text<font face="宋体" lang="ZH-CN">和</font>Lines
<font face="宋体" lang="ZH-CN">属性中,</font>Text<font face="宋体" lang="ZH-CN">用于保存一个字符串</font>(String)<font
face="宋体" lang="ZH-CN">,</font>Lines<font face="宋体" lang="ZH-CN">用于保存一个字符串链表</font>(TStrings)<font
face="宋体" lang="ZH-CN">对象。</p>
</font><p><font face="宋体" lang="ZH-CN">
为了显示联接数据,可以在</font>DDEClientItem<font
face="宋体" lang="ZH-CN">的</font>OnChange<font face="宋体" lang="ZH-CN">事件中把数值赋给一个可视部件。</p>
<p>下面的事件过程把联接数据实时地显示在一个编辑框中。</font></p>
<font face="宋体" lang="ZH-CN"><p> </font>procedure Form1.DDEClientItemChange(Sender:
Tobject);</p>
<p>begin</p>
<p>Edit1.Text := DDEClientItem1.Text;</p>
<p>end; </p>
<p><font face="宋体" lang="ZH-CN">
运行状态下也可以从剪贴板上粘贴</font>DDE<font
face="宋体" lang="ZH-CN">联接信息,并调用</font>SetLink<font face="宋体"
lang="ZH-CN">建立</font>DDE<font face="宋体" lang="ZH-CN">会话。下面的例子显示了当用户按下应用程序中的</font>Paste
Link<font face="宋体" lang="ZH-CN">按钮时,动态建立</font>DDE<font face="宋体"
lang="ZH-CN">会话的过程。 </p>
</font><p>procedure Form1.OnPasteLink(Sender: Tobject)<font face="宋体" lang="ZH-CN">;</p>
<p> </font>var</p>
<p>Service, Topic, Item: String;</p>
<p>begin</p>
<p>if GetPasteLinkInfo (Service, Topic, Item) then</p>
<p>begin</p>
<p>AppName.Text := Service;</p>
<p>TopicName.Text := Topic;</p>
<p>ItemName.Text := Item;</p>
<p>DDEClient.SetLink (Service, Topic); </p>
<p>DDEClientItem.DdeConv := DDEClient;</p>
<p>DDEClientItem.DDEItem := ItemName.Text;</p>
<p>end;</p>
<p>end; </p>
<p> GetPasteLinkInfo<font face="宋体"
lang="ZH-CN">是</font>DDEMan <font face="宋体" lang="ZH-CN">库单元中定义的一个过程。如果返回</font>True<font
face="宋体" lang="ZH-CN">,则</font>DDE<font face="宋体" lang="ZH-CN">联接信息保存在三个参数中;如果返回</font>False<font
face="宋体" lang="ZH-CN">,说明剪贴板上没有正确格式的</font>DDE<font
face="宋体" lang="ZH-CN">联接信息。 </p>
</font><p>7.3.3 <font face="宋体" lang="ZH-CN">数据申请 </p>
<p>虽然自动模式快捷、方便,但仍有一些理由使用</font>DDE<font
face="宋体" lang="ZH-CN">的人工模式:</p>
</font><p>1.<font face="宋体" lang="ZH-CN">服务器程序可能不支持自动数据传输,客户必须显式申请服务器更新一个特定的项目;</p>
</font><p>2.<font face="宋体" lang="ZH-CN">节省通信费用。假如没有实时传输的要求,则人工模式可以大幅度降低通信的开销;</p>
</font><p>3.<font face="宋体" lang="ZH-CN">若客户程序只用于控制服务器的运行,则往往没有必要使用自动模式。</p>
</font><p><font face="宋体" lang="ZH-CN">
人工模式下客户程序的数据更新需要采用数据申请的方式。数据申请需要调用</font>DDEClientConv<font
face="宋体" lang="ZH-CN">部件的</font>RequestData<font face="宋体" lang="ZH-CN">方法。</font>RequestData<font
face="宋体" lang="ZH-CN">有一个参数,指向要申请的</font>DDE<font
face="宋体" lang="ZH-CN">项目。</font>RequestData<font face="宋体" lang="ZH-CN">返回一个</font>Pchar<font
face="宋体" lang="ZH-CN">类型的无结束符字符串,包含了申请到的文本。返回字符串占用的内存必须在程序终止前显式释放。</p>
</font><p><font face="宋体" lang="ZH-CN">
在人工模式下,即使存在一个</font>DDEClientItem<font
face="宋体" lang="ZH-CN">部件且与</font>DDEClientConv<font face="宋体"
lang="ZH-CN">相联接,数据更新后</font>DDEClientItem<font face="宋体"
lang="ZH-CN">部件的</font>Text<font face="宋体" lang="ZH-CN">、</font>Lines<font
face="宋体" lang="ZH-CN">属性的值也不会改变。 </p>
</font><p>7.3.4 <font face="宋体" lang="ZH-CN">数据发送 </p>
</font><p><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">
数据发送使用</font>DDEClientConv<font
face="宋体" lang="ZH-CN">部件的两个方法</font>PokeData <font face="宋体"
lang="ZH-CN">和</font> PokeDataLines<font face="宋体" lang="ZH-CN">,</font> <font
face="宋体" lang="ZH-CN">它们的语法是: </p>
<p> </font>function PokeData (Item: String ; Data: PChar): Boolean;</p>
<font face="宋体" lang="ZH-CN"><p> </font>function PokeDataLines (Item: String ;
Data: TStrings): Boolean; </p>
<p><font face="宋体" lang="ZH-CN"> 参数</font>Item<font
face="宋体" lang="ZH-CN">是</font>DDE<font face="宋体" lang="ZH-CN">服务器中被联接的项目,</font>Data<font
face="宋体" lang="ZH-CN">是要发送的数据。如果数据是一个字符串,则把它转化为</font>PChar<font
face="宋体" lang="ZH-CN">类型并调用</font>PokeData<font face="宋体" lang="ZH-CN">方法;如果数据是一个字符串链表对象,可调用</font>PokeDataLines<font
face="宋体" lang="ZH-CN">方法。 </font></p>
<p><font face="宋体" lang="ZH-CN">
方法的返回值标志数据传送是否成功。因为有一些</font>DDE<font
face="宋体" lang="ZH-CN">服务器应用程序并不接收发送的数据。</font></p>
<font face="宋体" lang="ZH-CN"><p>下面的语句把编辑框中的内容发送给服务器: </p>
<p> </font>StrPCopy(TheText , Edit1.text);</p>
<p>DDEClientConv1.PokeData(DDEClientItem1.DDEItem , TheText); </p>
<p><font face="宋体" lang="ZH-CN">过程</font>StrPCopy<font face="宋体" lang="ZH-CN">把一个</font>Pascal<font
face="宋体" lang="ZH-CN">类型的字符串拷贝到一个无结束符的</font>PChar<font
face="宋体" lang="ZH-CN">类型字符串中。 </font></p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" background="bg.gif"><strong><A HREF="020.htm" ><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR>
<A HREF="018.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 + -