黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

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

2011年等考Delphi講義:剪貼板和動態數據交換

來源:考試吧Exam8.com) 2010-10-27 14:34:24 考試吧:中國教育培訓第一門戶 模擬考場
應用程序間的數據交換是象Windows 這樣的多任務環境的重要特性。

  創建程序組:

  procedure TForm1.CreateButtonClick(Sender: TObject);

  var

  Name: String;

  begin

  Name := InputBox('Input Box','Input Group Name','');

  if Name = '' then

  MessageDlg('Group name can not be blank.', mtError, [mbOK], 0)

  else

  if SendMacro(Name,'CreateGroup') = False then

  MessageDlg('Unable to create group.', mtInformation, [mbOK], 0);

  end;

  添加程序項:

  procedure TForm1.AddButtonClick(Sender: TObject);

  var

  Name: String;

  begin

  Name := InputBox('Input Box','Input Application full_Path name','');

  if Name = '' then

  MessageDlg('Application name can not be blank.', mtError, [mbOK], 0)

  else

  if SendMacro(Name,'AddItem') = False then

  MessageDlg('Unable to Add Item.', mtInformation, [mbOK], 0);

  end;

  刪除程序組:

  procedure TForm1.DeleteButtonClick(Sender: TObject);

  var

  Name: String;

  begin

  Name := InputBox('Input Box','Input Group Name to be Deleted','');

  if Name = '' then

  MessageDlg('Group name can not be blank.', mtError, [mbOK], 0)

  else

  if SendMacro(Name,'DeleteGroup') = False then

  MessageDlg('Unable to create group.', mtInformation, [mbOK], 0);

  end;

  7.4 DDE服務器程序的實現

  DDE服務器程序響應DDE客戶的請求,一般地它包含了客戶程序希望獲取的數據。

  創建一個DDE服務器程序,必須要把一個DDEServerItem部件添加到窗體中。DDEServerItem的text或Lines屬性包含了要聯接的數據。一般地 DDEServerItem部件又和另一個文本控件相聯系。當文本控件中的內容變化時則更新DDEServerItem 的text或Lines屬性的值。下面的一段程序把DDEServerItem和一個列表框相聯系。這一聯系是在列表框的OnChange事件中實現。

  procedure Form1.OnListBoxChange(Sender: TObject);

  begin

  DDEServerItem1.Lines := ListBox1.Items;

  end;

  創建DDE服務器程序時也可以再加入一個DDEServerConv部件,并把兩個部件利用DDEServerItem的ServerConv屬性聯系起來。此時DDE主題成為部件DDEServerConv的名稱,而不是擁有DDEServerItem部件窗體的標題。

  在下列情況下使用DDEServerConv部件成為必要:

  1.擁有DDEServerItem 部件窗體的標題可能在運行時改變或可能有其它窗體擁有同樣的標題。在這種情況下DDE聯接可能無法建立;

  2.DDE客戶程序可能會向你的服務器程序發送一條宏命令。在這種情況下只有擁有一個DDEServerConv部件才能響應OnMacroExecute事件并執行相應的動作。

  7.4.1 和DDE客戶程序建立聯接

  一般說來,建立DDE聯接是客戶程序的任務。但服務器程序可以把一個聯接拷貝到剪貼板上供客戶程序粘貼并建立DDE會話。步驟如下:

  1.調用DDEServerItem部件的CopyToClipboard方法, 把Text(或Lines)屬性的值和DDE聯接信息拷貝到剪貼板上;

  2.DDE客戶程序插入聯接的數據。一般地這是通過選擇適當的命令(如Edit|Paste Special或Edit|Paste Link)來實現的。

  7.4.2 響應DDE事件

  部件DDEServerConv有三個事件:OnOpen、OnClose、OnExecuteMacro。前兩個事件在DDE會話建立和終止時觸發。同(7.3.7)中的介紹。

  OnExecuteMacro事件用于響應客戶程序發送過來的宏指令。OnExecuteMacro事件處理過程有一個Msg參數,保存發送過來的指令串。用戶可以在該過程中決定如何響應這些宏指令。

  DDEServerItem部件只有一個事件OnPokeData。這一事件用于響應客戶程序發送來的數據。如果客戶程序是Delphi程序,則客戶程序調用了PokeData或PokeDataLines方法。在這一事件的處理過程中用戶可以把發送來的數據保存到一個合適的地方。一般說來這應該就是DDEServerItem所聯系的文本控件。

  下面的程序把發送來的數據保存到ListBox中。

  procedure Form1.OnDDEServerItemPokeData(Serder: TObject);

  begin

  ListBox1.Items := DDEServerItem1.Lines;

  end;

  7.4.3 DDE服務器應用例程

  下面我們創建一個DDE服務器例程和一個相應的DDE客戶例程。

  DDE服務器例程可以完成的工作有:

  1.把DDE聯接信息拷貝到剪貼板上供其它程序使用;

  2.利用一個TMemo部件為其它程序提供數據源;

  3.接收客戶程序發送來的數據;

  4.根據客戶程序發送來的宏指令改變自身的運行狀態。

  其中各部件的關鍵屬性如下:

  DDESrvrForm.ActiveControl = Memo1

  DDESrvrForm.Menu = MainMenu1

  Bevel1.Align = alTop

  Memo1.Align = alClient

  DDETestItem.ServerConv = DDETestTopic

  通過設置Bevel1、Memo1的Align屬性,可以保證窗口大小變化時仍能有較為美觀的屏幕顯示。

  Memo1是服務器的數據源,DDE項目部件DDETestItem通過Memo1的OnChange事件與Memo1 建立聯系。

  procedure TDdeSrvrForm.doOnChange(Sender: TObject);

  begin

  if not FInPoke then

  DDETestItem.Lines := Memo1.Lines;

  end;

  其中FInPoke是一個布爾類型的私有數據成員,用于標志程序是否在處理客戶程序的數據發送。當數據是由客戶發送過來轉存到數據源時,則沒有必要再把數據傳給DDE項目部件。

  把聯接信息拷貝到剪貼板,只需簡單調用DDETestItem的CopyToClipboard方法。

  procedure TDDESrvrForm.CopyClick(Sender: TObject);

  begin

  DDETestItem.CopyToClipboard;

  end;

  這是通過菜單項Edit|Copy來調用的。

  接收客戶程序發送來的數據,是在DDETestItem的OnPokeData事件處理過程中。在接收過程中改變FInPoke的值,以阻止數據的無效反送。

  procedure TDDESrvrForm.doOnPoke(Sender: TObject);

  begin

  FInPoke := True;

  Memo1.Lines := DDETestItem.Lines;

  FInPoke := False;

  end;

  在DDE會話部件DDETestTopic的OnExecuteMacro事件處理過程中處理客戶發送來的宏指令。我們共定義了五種可以響應的宏指令:CopyDDE、Clear、WS_Normal、WS_MINIMIZED、WS_MAXIMIZED,分別用于拷貝聯接信息、清除Memo1中的內容以及改變窗口顯示狀態。

  procedure TDdeSrvrForm.doMacro(Sender: TObject;Msg: TStrings);

  var

  Cmd: String;

  i: Integer;

  begin

  Cmd := '';

  if Msg.Count = 0 then Exit;

  for I := 0 to Msg.Count-1 do

  begin

  Cmd := Msg.Strings[i];

  if UpperCase(Cmd) = 'COPYDDE' then

  DDETestItem.CopyToClipboard

  else if UpperCase(Cmd) = 'CLEAR' then

  Memo1.text: = ''

  else if UpperCase(Cmd) = 'WS_NORMAL' then

  WindowState := wsNormal

  else if UpperCase(Cmd) = 'WS_MINIMIZED' then

  WindowState := wsMinimized

  else if UpperCase(Cmd) = 'WS_MAXIMIZED' then

  WindowState := wsMaximized

  else

  MessageDlg('Invalid Command',mtWarning,[mbOK],0);

  end;

  end;

  下面的DDE客戶程序,主要是為了驗證上面的DDE服務器程序而設計的,但同時也提供了一個DDE客戶程序設計的完整實例。

  程序把接收到的DDE數據保存在一個TMemo類部件DDEDat中,而欲發送給服務器的數據和宏指令在另一個TMemo類部件PokeDat中輸入。兩個按鈕PokeBtn、ExecuteBtn用于發送數據和宏指令。兩個菜單項File|New Link和Edit|Paste Link用于根據用戶的輸入建立新聯接和從剪貼板上粘貼DDE聯接。

  DDE聯接的建立通過調用SetLink方法實現。

  建立新聯接的實現代碼如下。

  procedure TFormD.doNewLink(Sender: TObject);

  begin

  DDEClient.SetLink (AppName.Text, TopicName.Text);

  DDEClientItem.DdeConv := DDEClient;

  DDEClientItem.DDEItem := ItemName.Text;

  end;

  通過從剪貼板粘貼聯接信息來建立聯接的實現代碼如下。

  procedure TFormD.Edit1Click(Sender: TObject);

  var

  Service, Topic, Item : String;

  begin

  PasteLink1.Enabled := GetPasteLinkInfo (Service, Topic, Item);

  end;

  procedure TFormD.doPasteLink(Sender: TObject);

  var

  Service, Topic, Item : String;

  begin

  if GetPasteLinkInfo (Service, Topic, Item) then

  begin

  AppName.Text := Service;

  TopicName.Text := Topic;

  ItemName.Text := Item;

  DDEClient.SetLink (Service, Topic);

  DDEClientItem.DdeConv := DDEClient;

  DDEClientItem.DdeItem := ItemName.Text;

  end;

  end;

  在DDEClientItem的OnChange事件處理過程中把接收到的事件保存在DDEDat中。

  procedure TFormD.DDEClientItemChange(Sender: TObject);

  begin

  DDEDat.Lines := DDEClientItem.Lines;

  end;

  數據發送的實現代碼如下。

  procedure TFormD.doPoke (Sender: TObject);

  var

  DDECli : TDDEClientConv;

  begin

  DDECli := DDEClientItem.DdeConv;

  if DdeCli <> nil then

  DDECli.PokeDataLines (DDEClientItem.DDEItem, PokeDat.Lines);

  end;

  宏指令發送的實現代碼如下。

  procedure TFormD.doMacro (Sender: TObject);

  var

  DDECli: TDDEClientConv;

  Cmd: String;

  begin

  DDECli := DDEClientItem.DdeConv;

  if DDECli <> nil then

  begin

  Cmd := PokeDat.Text + #13#10;

  DDECli.ExecuteMacroLines (PokeDat.Lines, True);

  end;

  end;

  運行以上兩個程序,建立DDE聯接。經測試,數據傳輸、數據發送和宏指令的發送與執行都達到預期要求。

  7.4.4 小結

  剪貼板和DDE是Windows下數據通信的兩種方法。Delphi以簡便、友好的方式實現了相應的功能,為用戶編程提供了方便。一般說來,剪貼板多用于靜態數據傳輸,而DDE用于動態數據交換、控制其它程序運行等場合。這些內容對于多用戶環境下的程序開發是很重要的。

上一頁  1 2 3 4 5  下一頁
  相關推薦:2010年9月計算機等級考試試題及答案解析專題
       預告:名師解析2010年9月計算機等級考試試題答案
       2010年9月計算機等級考試成績查詢時間及入口
       2010年9月計算機等考成績查詢短信免費提醒開通
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
主站蜘蛛池模板: 国产一区精品视频 | 免费毛片看 | 全黄一级裸片视频免费 | 曰批全过程免费视频播放网站 | 在线成人 | 精品国偷自产在线视频99 | 欧日韩美香蕉在线观看 | 欧美人一级淫片a免费播放 欧美人妖猛交 | 五月天精品视频播放在线观看 | 国产日韩网站 | 黄网站视频 | 欧美日韩亚洲精品国产色 | 国产日韩欧美精品一区二区三区 | 美女视频黄a全部免费专区一 | 人人看人人添人人谢 | 久久久久夜色精品波多野结衣 | 国产精品午夜在线观看 | 亚洲国产成人资源在线软件 | 国产成人精品免费视频大全软件 | 最近免费中文字幕完整4 | 香蕉网站狼人久久五月亭亭 | 又爽又黄又无遮挡网站 | 一级毛片一级毛片一级毛片 | 最近中文字幕完整国语 | 成年人天堂| 一本久 | 亚洲欧美日韩中文v在线 | 二区三区不卡不卡视频 | 国产精品国内免费一区二区三区 | 欧洲日韩 | 黄色视品 | 69国产成人精品视频软件 | 狠狠操人人| 免费看黄色三级毛片 | h在线免费视频 | 天天做天天爱夜夜爽 | 欧美色图一区 | 黄色黑丝网站 | 一个人看日本www | 国产日韩一区 | 欧美视频久久 |