首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問(wèn) | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱 | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011年等考Delphi講義:剪貼板和動(dòng)態(tài)數(shù)據(jù)交換

應(yīng)用程序間的數(shù)據(jù)交換是象Windows 這樣的多任務(wù)環(huán)境的重要特性。

  7.3.4 數(shù)據(jù)發(fā)送

  數(shù)據(jù)發(fā)送與一般的DDE數(shù)據(jù)流向正好相反,是把數(shù)據(jù)從DDE客戶應(yīng)用程序發(fā)送到DDE服務(wù)器應(yīng)用程序。

  數(shù)據(jù)發(fā)送使用DDEClientConv部件的兩個(gè)方法PokeData 和 PokeDataLines, 它們的語(yǔ)法是:

  function PokeData (Item: String ; Data: PChar): Boolean;

  function PokeDataLines (Item: String ; Data: TStrings): Boolean;

  參數(shù)Item是DDE服務(wù)器中被聯(lián)接的項(xiàng)目,Data是要發(fā)送的數(shù)據(jù)。如果數(shù)據(jù)是一個(gè)字符串,則把它轉(zhuǎn)化為PChar類型并調(diào)用PokeData方法;如果數(shù)據(jù)是一個(gè)字符串鏈表對(duì)象,可調(diào)用PokeDataLines方法。

  方法的返回值標(biāo)志數(shù)據(jù)傳送是否成功。因?yàn)橛幸恍〥DE服務(wù)器應(yīng)用程序并不接收發(fā)送的數(shù)據(jù)。

  下面的語(yǔ)句把編輯框中的內(nèi)容發(fā)送給服務(wù)器:

  StrPCopy(TheText , Edit1.text);

  DDEClientConv1.PokeData(DDEClientItem1.DDEItem , TheText);

  過(guò)程StrPCopy把一個(gè)Pascal類型的字符串拷貝到一個(gè)無(wú)結(jié)束符的PChar類型字符串中。

  7.3.5 控制服務(wù)器應(yīng)用程序的執(zhí)行

  客戶程序控制服務(wù)器應(yīng)用程序的一個(gè)方面是:必要的時(shí)候客戶程序可以啟動(dòng)服務(wù)器程序,并裝載會(huì)話主題。

  而客戶程序控制服務(wù)器應(yīng)用程序更重要的一點(diǎn)是向服務(wù)器發(fā)送服務(wù)器承認(rèn)的宏命令,來(lái)完成對(duì)服務(wù)器應(yīng)用程序的各種操作。服務(wù)器到底支持哪些宏命令,可參閱服務(wù)器應(yīng)用程序文檔。

  發(fā)送宏命令要使用DDEClientConv的兩個(gè)方法 ExecuteMacro和ExecuteMacroLines ,它們的語(yǔ)法如下:

  function ExecuteMacro(Cmd: PChar; WaitFlag: Boolean): Boolean;

  function ExecuteMacroLines(Cmd: TStrings;WaitFlag: Boolean): Boolean;

  Cmd是欲發(fā)送的宏命令字符串或宏命令字符串鏈表。WaitFlag決定了在DDE 服務(wù)器程序執(zhí)行宏命令時(shí)客戶程序的行為。如果WaitFlag設(shè)置為True,則在服務(wù)器宏命令執(zhí)行完畢前,不允許對(duì)ExecuteMacro、ExecuteMacroLines、PokeData、PokeDataLines這些方法的成功調(diào)用,它們都不向服務(wù)器發(fā)送數(shù)據(jù)并返回False。如果WaitFlag設(shè)置為False,則調(diào)用的方法在第一個(gè)宏執(zhí)行完畢前即試圖向服務(wù)器發(fā)送數(shù)據(jù)。

  WaitFalg的設(shè)置也取決于服務(wù)器應(yīng)用程序。一些應(yīng)用程序當(dāng)在第一個(gè)宏執(zhí)行完之前就試圖向它發(fā)送數(shù)據(jù)或命令時(shí),可能導(dǎo)致第一個(gè)宏執(zhí)行失敗或?qū)е虏豢深A(yù)料的后果。具體情況可查閱服務(wù)器應(yīng)用程序文檔。

  函數(shù)返回值表示命令串是否被成功傳輸。而宏命令執(zhí)行是否成功客戶是無(wú)法檢測(cè)到的。

  7.3.6 格式化文本

  DDEClientConv有一個(gè)布爾屬性FormartChars,用于決定是否格式化文本。所謂格式化文本是指從傳輸來(lái)的文本數(shù)據(jù)中過(guò)濾掉BackSpace(8)、 Tab(7) 、Linefeed(10) 、Return(13)等字符。括號(hào)內(nèi)是字符的ASCII碼。許多時(shí)候這些字符將導(dǎo)致DDE客戶數(shù)據(jù)顯示的混亂。

  FormatChars的缺省值是False。

  7.3.7 響應(yīng)DDE事件

  部件DDEClientConv有兩個(gè)事件OnOpen和OnClose,分別在DDE 會(huì)話建立和中止時(shí)觸發(fā)。部件DDEClientItem有一個(gè)OnChange事件。這一事件常用于DDE項(xiàng)目數(shù)據(jù)的轉(zhuǎn)儲(chǔ)和顯示,如(7.3.1)節(jié)所示。

  在自動(dòng)模式下,OnOpen事件在包含DDEClientConv部件的窗口創(chuàng)建時(shí)觸發(fā),或在調(diào)用SetLink方法時(shí)觸發(fā),OnClose事件在客戶程序或服務(wù)器程序關(guān)閉時(shí)觸發(fā)。

  在人工模式下,OnOpen事件在調(diào)用OpenLink 方法時(shí)觸發(fā),OnClose事件在調(diào)用ColseLink方法時(shí)觸發(fā)。

  7.3.8 利用客戶程序和Excel交換數(shù)據(jù)

  下面我們建立一個(gè)DDE客戶程序,并利用這一程序與Excel中的一個(gè)工作表交換數(shù)據(jù)。程序設(shè)計(jì)界面

  界面中包含一個(gè)DDE會(huì)話部件DDEClientConv1和DDE項(xiàng)目部件DDEClientItem1,用于建立和維護(hù)DDE聯(lián)接;一個(gè)RadioGroup控件和其中的兩個(gè)無(wú)線電按鈕AutoRadio、ManualRadio,用于設(shè)置聯(lián)接模式;一個(gè)GroupBox控件和其中的兩個(gè)按鈕RequestBtn和PokeBtn,用于控制數(shù)據(jù)的申請(qǐng)和發(fā)送,其中RequestBtn在自動(dòng)模式下變灰;一個(gè)文本框Memo1用于保存DDE數(shù)據(jù);一個(gè)按鈕PasteBtn用于粘貼聯(lián)接信息并建立DDE聯(lián)接;另外一個(gè)按鈕CloseBtn用于關(guān)閉系統(tǒng)。

  設(shè)計(jì)時(shí)把DDEClientConv1的FormatChars屬性置為True,這樣可以保留服務(wù)器傳來(lái)數(shù)據(jù)的顯示格式;ConnectMode保留ddeAutomatic的缺省設(shè)置。

  程序在類TForm1中定義了一個(gè)私有數(shù)據(jù)成員Automatic,用于標(biāo)志聯(lián)接模式;三個(gè)字符串?dāng)?shù)據(jù)成員DDEService、DDETopic、DDEItem用于記錄聯(lián)接信息。

  窗口生成時(shí)進(jìn)行變量和部件狀態(tài)的初始化。

  procedure TForm1.FormCreate(Sender: TObject);

  begin

  RequestBtn.Enabled := False;

  AutoRadio.Checked := True;

  Automatic := True;

  end;

  當(dāng)聯(lián)接模式改變時(shí),程序進(jìn)行相應(yīng)的處理。

  自動(dòng)模式轉(zhuǎn)換為人工模式:

  procedure TForm1.ManualRadioClick(Sender: TObject);

  begin

  if Automatic then

  begin

  RequestBtn.Enabled := ManualRadio.Checked;

  DDEClientConv1.ConnectMode := ddeManual;

  Automatic := False;

  end;

  end;

  人工模式轉(zhuǎn)換為自動(dòng)模式:

  procedure TForm1.AutoRadioClick(Sender: TObject);

  begin

  if not Automatic then

  begin

  RequestBtn.Enabled := ManualRadio.Checked;

  If (DDEService = '') or (DDETopic = '') then

  begin

  MessageDlg(' Can not Set Link.',mtWarning,[mbOK],0);

  Exit;

  end;

  DDEClientConv1.SetLink (DDEService, DDETopic);

  DDEClientItem1.DdeConv := DDEClientConv1;

  DDEClientItem1.DDEItem := DDEItem;

  DDEClientConv1.ConnectMode := ddeAutomatic;

  Automatic := True;

  end;

  end;

  當(dāng)從自動(dòng)模式轉(zhuǎn)換到人工模式,只需要簡(jiǎn)單修改相應(yīng)屬性即可;而從人工模式轉(zhuǎn)換到自動(dòng)模式,則需要調(diào)用SetLink重新建立聯(lián)接,否則往往會(huì)引發(fā)一個(gè)DDE異常。

  聯(lián)接的建立采用從剪貼板粘貼聯(lián)接信息的方式,這是最具有靈活性的一種方法。

  procedure TForm1.PasteBtnClick(Sender: TObject);

  begin

  if GetPasteLinkInfo (DDEService, DDETopic, DDEItem) then

  begin

  DDEClientConv1.SetLink (DDEService, DDETopic);

  if Automatic then

  begin

  DDEClientItem1.DdeConv := DDEClientConv1;

  DDEClientItem1.DDEItem := DDEItem;

  end;

  end;

  end;

  GetPasteInfo是 DDEMan庫(kù)單元中定義的一個(gè)函數(shù),用于檢測(cè)剪貼板上是否有聯(lián)接信息并返回相應(yīng)的DDE服務(wù)、主題和項(xiàng)目。

  對(duì)于人工模式,必須由客戶顯式向服務(wù)器申請(qǐng)數(shù)據(jù)。在這種模式下DDE項(xiàng)目部件是多余的,接收到的DDE聯(lián)接信息用一個(gè)字符串來(lái)記錄。下面是實(shí)現(xiàn)代碼。

  procedure TForm1.RequestBtnClick(Sender: TObject);

  var

  TheData: PChar;

  begin

  If DDEItem = '' then

  begin

  MessageDlg('Can not Request Data',mtWarning,[mbOK],0);

  Exit;

  end;

  TheData := StrAlloc(79);

  DDEClientConv1.OpenLink;

  TheData := DDEClientConv1.RequestData(DDEItem);

  DDEClientConv1.CloseLink;

  if TheData <> nil then

  Memo1.Text := StrPas(TheData);

  StrDisPose(TheData);

  end;

  OpenLink、CloseLink方法用于打開(kāi)和關(guān)閉聯(lián)接。RequestData方法向服務(wù)器申請(qǐng)數(shù)據(jù)并返回到一個(gè)PChar字符串中。字符串必須顯式分配內(nèi)存并在退出時(shí)釋放。

  數(shù)據(jù)發(fā)送在不同聯(lián)接模式下是不同的。對(duì)于人工模式,增加了聯(lián)接的打開(kāi)和關(guān)閉操作。程序清單如下。

  procedure TForm1.PokeBtnClick(Sender: TObject);

  begin

  If DDEItem = '' then

  begin

  MessageDlg('Can not Poke Data.',mtWarning,[mbOK],0);

  Exit;

  end;

  if Automatic then

  DDEClientConv1.PokeDataLines(DDEItem,Memo1.Lines)

  else

  begin

  DDEClientConv1.OpenLink;

  DDEClientConv1.PokeDataLines(DDEItem,Memo1.Lines);

  DDEClientConv1.CloseLink;

  end;

  end;

  打開(kāi)Microsoft Office中的Excel,裝入一個(gè)文件,把相關(guān)的單元選中,拷貝到剪貼板上。而后運(yùn)行程序,按下Paste Link按鈕,DDE聯(lián)接就建立起來(lái),相關(guān)單元中的數(shù)據(jù)顯示在Memo1中。之后可以進(jìn)行模式轉(zhuǎn)換、數(shù)據(jù)申請(qǐng)、申請(qǐng)發(fā)送等一系列工作。運(yùn)行后的屏幕顯示如下圖所示。

  7.3.9 用客戶程序控制程序管理器

  下面的例子用客戶程序向程序管理器發(fā)送命令,用于創(chuàng)建程序組、程序項(xiàng)以及刪除程序組。

  程序管理器提供了應(yīng)用程序的DDE接口命令字符串,應(yīng)用程序利用這些命令字符串可以實(shí)現(xiàn)以下的功能:

  1.創(chuàng)建程序組

  命令格式為:

  CreateGroup(程序組名[,程序組所在的路徑])

  程序組不存在時(shí)進(jìn)行創(chuàng)建;如程序組存在則按照指定的路徑激活。

  2.刪除程序組

  命令格式為:

  DeleteGroup(程序組名)

  3.顯示程序組

  命令格式為;

  ShowGroup(程序組名,顯示標(biāo)志)

  顯示標(biāo)志用于控制程序組在程序管理器中以極大、極小或正常方式顯示。

  4.重新裝入程序組

  命令格式為:

  ReLoadGroup(程序組名)

  該命令使程序管理器先刪除而后再重新裝入一個(gè)已有的程序組。

  5.向程序組中添加程序項(xiàng)

  命令格式為:

  AddItem(命令行[,描述[,圖標(biāo)路徑[,圖標(biāo)序號(hào)[,圖標(biāo)橫坐標(biāo),圖標(biāo)縱坐標(biāo)[,工作區(qū)目錄[,熱鍵[,是否最小化顯示標(biāo)志]]]]]]])

  命令行控制程序項(xiàng)的執(zhí)行,可包括路徑、參數(shù)等。其它參數(shù)分別對(duì)應(yīng)在程序管理器中添加一個(gè)程序項(xiàng)時(shí)需要設(shè)置的參數(shù)和選項(xiàng)。它們都有缺省設(shè)置,因而是可選的。

  6.替換程序組中的程序項(xiàng)

  命令格式為:

  ReplaceItem(程序項(xiàng)名)

  該命令刪除一個(gè)程序項(xiàng),并將所刪除程序項(xiàng)的位置記錄下來(lái),以后通過(guò)AddItem在這個(gè)所記錄的位置增加新項(xiàng)目。

  7.從程序組中刪除程序項(xiàng)

  命令格式為:

  DeleteItem(程序項(xiàng)名)

  從當(dāng)前活動(dòng)程序組中刪除一個(gè)程序項(xiàng)。

  8.關(guān)閉程序管理器

  命令格式為:

  ExitProgram(是否保存程序組信息標(biāo)志)

  從應(yīng)用程序向程序管理器發(fā)送命令字符串的方法是基本一致的。為簡(jiǎn)便起見(jiàn),在例程中只實(shí)現(xiàn)了其中僅包含一個(gè)字符串參數(shù)的情形,讀者可以很容易作進(jìn)一步的擴(kuò)展。

  程序設(shè)計(jì)界面如圖所示,包含一個(gè)DDE客戶會(huì)話(DDEClientConv)部件和四個(gè)完成不同功能的按鈕。

  DDEClientConv在設(shè)計(jì)時(shí)和程序管理器建立一個(gè)DDE會(huì)話,其中DDE服務(wù)器和DDE主題 都為PROGMAN。聯(lián)接模式ConnectMode設(shè)置為ddeManual。

  我們把只有一個(gè)字符串參數(shù)的命令發(fā)送情況抽象出來(lái),形成下面的SendMacro函數(shù)。

  function TForm1.SendMacro(Name: String;Command: String): Boolean;

  var

  Macro: String;

  Cmd: array[0..255] of Char;

  begin

  Result := True;

  if Name <> '' then

  begin

  Macro := Format('['+Command+'(%s)]', [Name]) + #13#10;

  StrPCopy (Cmd, Macro);

  DDEClient.OpenLink;

  if not DDEClient.ExecuteMacro(Cmd, False) then

  Result := False;

  DDEClient.CloseLink;

  end;

  end;

  過(guò)程首先利用Format函數(shù)形成宏字符串:

  Macro := Format('['+Command+'(%s)]', [Name]) + #13#10;

  而后把Pascal類型的字符串拷貝到一個(gè)程序管理器可接受的PChar類型字符串中。

  DDE聯(lián)接采用人工模式。首先調(diào)用OpenLink方法。而后調(diào)用ExecuteMacro方法發(fā)送命令,如失敗則返回False。最后用CloseLink關(guān)閉聯(lián)接。

  三個(gè)按鈕CreateButton、AddButton、DeleteButton分別用于創(chuàng)建程序組、添加程序項(xiàng)、刪除程序組。它們的程序?qū)崿F(xiàn)大同小異,如下所示。

  相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專題
       預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
       2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及入口
       2010年9月計(jì)算機(jī)等考成績(jī)查詢短信免費(fèi)提醒開(kāi)通
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。