在线现看午夜福利片|女人16久久免费视频|鲁丝片一区鲁丝片二区鲁丝|一区二区三区欧美在线

  1. 
    
    <b id="glvx9"></b>
        1. <blockquote id="glvx9"><meter id="glvx9"></meter></blockquote>
            首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
            2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
            MPA考試 | 中科院
            四六級(jí) | 職稱英語 | 商務(wù)英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT
            新概念英語 | 成人英語三級(jí) | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學(xué)習(xí) | 法語 | 德語 | 韓語
            計(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è)資格 | 司法考試 | 法律顧問 | 導(dǎo)游資格
            報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷員 | 國際商務(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ī)劃師 | 國際內(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í)用文檔 | 英語學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

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

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

              創(chuàng)建程序組:

              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;

              添加程序項(xiàng):

              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服務(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ù)拿?如Edit|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;

              7.4.3 DDE服務(wù)器應(yīng)用例程

              下面我們創(chuàng)建一個(gè)DDE服務(wù)器例程和一個(gè)相應(yīng)的DDE客戶例程。

              DDE服務(wù)器例程可以完成的工作有:

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

              2.利用一個(gè)TMemo部件為其它程序提供數(shù)據(jù)源;

              3.接收客戶程序發(fā)送來的數(shù)據(jù);

              4.根據(jù)客戶程序發(fā)送來的宏指令改變自身的運(yùn)行狀態(tài)。

              其中各部件的關(guān)鍵屬性如下:

              DDESrvrForm.ActiveControl = Memo1

              DDESrvrForm.Menu = MainMenu1

              Bevel1.Align = alTop

              Memo1.Align = alClient

              DDETestItem.ServerConv = DDETestTopic

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

              Memo1是服務(wù)器的數(shù)據(jù)源,DDE項(xiàng)目部件DDETestItem通過Memo1的OnChange事件與Memo1 建立聯(lián)系。

              procedure TDdeSrvrForm.doOnChange(Sender: TObject);

              begin

              if not FInPoke then

              DDETestItem.Lines := Memo1.Lines;

              end;

              其中FInPoke是一個(gè)布爾類型的私有數(shù)據(jù)成員,用于標(biāo)志程序是否在處理客戶程序的數(shù)據(jù)發(fā)送。當(dāng)數(shù)據(jù)是由客戶發(fā)送過來轉(zhuǎn)存到數(shù)據(jù)源時(shí),則沒有必要再把數(shù)據(jù)傳給DDE項(xiàng)目部件。

              把聯(lián)接信息拷貝到剪貼板,只需簡(jiǎn)單調(diào)用DDETestItem的CopyToClipboard方法。

              procedure TDDESrvrForm.CopyClick(Sender: TObject);

              begin

              DDETestItem.CopyToClipboard;

              end;

              這是通過菜單項(xiàng)Edit|Copy來調(diào)用的。

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

              procedure TDDESrvrForm.doOnPoke(Sender: TObject);

              begin

              FInPoke := True;

              Memo1.Lines := DDETestItem.Lines;

              FInPoke := False;

              end;

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

              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客戶程序,主要是為了驗(yàn)證上面的DDE服務(wù)器程序而設(shè)計(jì)的,但同時(shí)也提供了一個(gè)DDE客戶程序設(shè)計(jì)的完整實(shí)例。

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

              DDE聯(lián)接的建立通過調(diào)用SetLink方法實(shí)現(xiàn)。

              建立新聯(lián)接的實(shí)現(xiàn)代碼如下。

              procedure TFormD.doNewLink(Sender: TObject);

              begin

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

              DDEClientItem.DdeConv := DDEClient;

              DDEClientItem.DDEItem := ItemName.Text;

              end;

              通過從剪貼板粘貼聯(lián)接信息來建立聯(lián)接的實(shí)現(xiàn)代碼如下。

              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;

              數(shù)據(jù)發(fā)送的實(shí)現(xiàn)代碼如下。

              procedure TFormD.doPoke (Sender: TObject);

              var

              DDECli : TDDEClientConv;

              begin

              DDECli := DDEClientItem.DdeConv;

              if DdeCli <> nil then

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

              end;

              宏指令發(fā)送的實(shí)現(xiàn)代碼如下。

              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;

              運(yùn)行以上兩個(gè)程序,建立DDE聯(lián)接。經(jīng)測(cè)試,數(shù)據(jù)傳輸、數(shù)據(jù)發(fā)送和宏指令的發(fā)送與執(zhí)行都達(dá)到預(yù)期要求。

              7.4.4 小結(jié)

              剪貼板和DDE是Windows下數(shù)據(jù)通信的兩種方法。Delphi以簡(jiǎn)便、友好的方式實(shí)現(xiàn)了相應(yīng)的功能,為用戶編程提供了方便。一般說來,剪貼板多用于靜態(tài)數(shù)據(jù)傳輸,而DDE用于動(dòng)態(tài)數(shù)據(jù)交換、控制其它程序運(yùn)行等場(chǎng)合。這些內(nèi)容對(duì)于多用戶環(huán)境下的程序開發(fā)是很重要的。

            上一頁  1 2 3 4 5  下一頁
              相關(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)提醒開通
            文章搜索
            版權(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)注明出處。