?? 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%" bgcolor="#e0e0e0"><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 + -