全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)Delphi輔導(dǎo)講義 84

字號(hào):

7.4 DDE服務(wù)器程序的實(shí)現(xiàn)
    DDE服務(wù)器程序響應(yīng)DDE客戶的請(qǐng)求,一般地它包含了客戶程序希望獲取的數(shù)據(jù)。
    創(chuàng)建一個(gè)DDE服務(wù)器程序,必須要把一個(gè)DDEServerItem部件添加到窗體中。DDEServerItem的text或Lines屬性包含了要聯(lián)接的數(shù)據(jù)。一般地 DDEServerItem部件又和另一個(gè)文本控件相聯(lián)系。當(dāng)文本控件中的內(nèi)容變化時(shí)則更新DDEServerItem 的text或Lines屬性的值。下面的一段程序把DDEServerItem和一個(gè)列表框相聯(lián)系。這一聯(lián)系是在列表框的OnChange事件中實(shí)現(xiàn)。
    procedure Form1.OnListBoxChange(Sender: TObject);
    begin
    DDEServerItem1.Lines := ListBox1.Items;
    end;
    創(chuàng)建DDE服務(wù)器程序時(shí)也可以再加入一個(gè)DDEServerConv部件,并把兩個(gè)部件利用DDEServerItem的ServerConv屬性聯(lián)系起來。此時(shí)DDE主題成為部件DDEServerConv的名稱,而不是擁有DDEServerItem部件窗體的標(biāo)題。
    在下列情況下使用DDEServerConv部件成為必要:
    1.擁有DDEServerItem 部件窗體的標(biāo)題可能在運(yùn)行時(shí)改變或可能有其它窗體擁有同樣的標(biāo)題。在這種情況下DDE聯(lián)接可能無法建立;
    2.DDE客戶程序可能會(huì)向你的服務(wù)器程序發(fā)送一條宏命令。在這種情況下只有擁有一個(gè)DDEServerConv部件才能響應(yīng)OnMacroExecute事件并執(zhí)行相應(yīng)的動(dòng)作。
    7.4.1 和DDE客戶程序建立聯(lián)接
    一般說來,建立DDE聯(lián)接是客戶程序的任務(wù)。但服務(wù)器程序可以把一個(gè)聯(lián)接拷貝到剪貼板上供客戶程序粘貼并建立DDE會(huì)話。步驟如下:
    1.調(diào)用DDEServerItem部件的CopyToClipboard方法, 把Text(或Lines)屬性的值和DDE聯(lián)接信息拷貝到剪貼板上;
    2.DDE客戶程序插入聯(lián)接的數(shù)據(jù)。一般地這是通過選擇適當(dāng)?shù)拿睿ㄈ鏓dit|Paste Special或Edit|Paste Link)來實(shí)現(xiàn)的。
    7.4.2 響應(yīng)DDE事件
    部件DDEServerConv有三個(gè)事件:OnOpen、OnClose、OnExecuteMacro。前兩個(gè)事件在DDE會(huì)話建立和終止時(shí)觸發(fā)。同(7.3.7)中的介紹。
    OnExecuteMacro事件用于響應(yīng)客戶程序發(fā)送過來的宏指令。OnExecuteMacro事件處理過程有一個(gè)Msg參數(shù),保存發(fā)送過來的指令串。用戶可以在該過程中決定如何響應(yīng)這些宏指令。
    DDEServerItem部件只有一個(gè)事件OnPokeData。這一事件用于響應(yīng)客戶程序發(fā)送來的數(shù)據(jù)。如果客戶程序是Delphi程序,則客戶程序調(diào)用了PokeData或PokeDataLines方法。在這一事件的處理過程中用戶可以把發(fā)送來的數(shù)據(jù)保存到一個(gè)合適的地方。一般說來這應(yīng)該就是DDEServerItem所聯(lián)系的文本控件。
    下面的程序把發(fā)送來的數(shù)據(jù)保存到ListBox中。
    procedure Form1.OnDDEServerItemPokeData(Serder: TObject);
    begin
    ListBox1.Items := DDEServerItem1.Lines;
    end;