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

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

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

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

              第七章 剪貼板和動態(tài)數(shù)據(jù)交換

              應(yīng)用程序間的數(shù)據(jù)交換是象Windows 這樣的多任務(wù)環(huán)境的重要特性。作為一種基于Windows的開發(fā)工具,Delphi支持如下四種數(shù)據(jù)交換方式:剪貼板、動態(tài)數(shù)據(jù)交換 ( DDE)、對象聯(lián)接與嵌入(OLE)以及動態(tài)聯(lián)接庫(DLLs)。這中間前三種方式最為常用,OLE功能最為強(qiáng)大,DDE次之。而剪貼板使用最為方便。在本章,我們只討論剪貼板和動態(tài)數(shù)據(jù)交換。利用OLE實現(xiàn)數(shù)據(jù)交換見下一章,利用動態(tài)聯(lián)接庫(DLLs)進(jìn)行數(shù)據(jù)交換將在第十章中介紹。

              7.1 剪貼板及其應(yīng)用

              本質(zhì)上,剪貼板只是一個全局內(nèi)存塊。當(dāng)一個應(yīng)用程序?qū)?shù)據(jù)傳送給剪貼板后,通過修改內(nèi)存塊分配標(biāo)志,把相關(guān)內(nèi)存塊的所有權(quán)從應(yīng)用程序移交給Windows自身。其它應(yīng)用程序可以通過一個句柄找到這個內(nèi)存塊,從而能夠從內(nèi)存塊中讀取數(shù)據(jù)。這樣就實現(xiàn)了數(shù)據(jù)在不同應(yīng)用程序間的傳輸。

              剪貼板雖然功能較為簡單,且不能實現(xiàn)實時傳輸,但卻是更為復(fù)雜的DDE和OLE的基礎(chǔ)。對于一些只是偶爾需要使用其它應(yīng)用程序數(shù)據(jù)的程序來說,使用剪貼板不失為一種方便、快捷的方式。

              Delphi把剪貼板的大部分功能封裝到一個TClipboard類中,同時把使用頻度最高的文本傳輸功能(包括DBImage的圖像傳輸功能)置入相應(yīng)部件作為部件的方法,從而使用戶可以十分方便地使用剪貼板進(jìn)行編程。

              7.1.1 使用剪貼板傳輸文本

              剪貼板傳輸文本主要是應(yīng)用如下的三個方法:CopyToClipboard、CutToClipboard 和PasteFromClipboard。包含這些方法的部件如下表所示。

              表7.1 包含剪貼板方法的部件

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━

              方 法 部 件

              ———————————————————————————

              TDBEdit TDBMemo

              TDBImage

              CopyToClipboard TEdit TMemo TMaskEdit

              TOLEContainer

              TDDEServerItem

              ———————————————————————————

              TDBEdit TDBMemo

              CutToClipboard TDBImage

              TEdit TMemo TMaskEdit

              ———————————————————————————

              TDBEdit TDBMemo

              PasteFromClipboard TDBImage

              TEdit TMemo TMaskEdit

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━

              除TDBImage外,其余全是有關(guān)文本的控件。

              在把文本傳輸?shù)郊糍N板之前,文本必須被選中。

              若選TMaskEdit的AutoSelect屬性為True,則當(dāng)MaskEdit獲得輸入焦點時文本自動被選中;若選TEdit、TMemo的HideSelection屬性為True,則失去焦點時,文本選中狀態(tài)自動隱藏,重新獲得焦點時再顯示。

              下面的語句把MaskEdit中選中的文本剪切到剪貼板:

              MaskEdit .CutToClipboard;

              下面的語句把剪貼板中的文本粘貼到Memo的當(dāng)前光標(biāo)處:

              Memo.PasteFromClipboard;

              利用剪貼板類也可以實現(xiàn)文本的傳輸,見(7.1.2)中的介紹。

              7.1.2 剪貼板類

              為方便剪貼板的操作,Delphi在Clipbrd庫單元中定義了一個TClipboard類,并且預(yù)定義了一個變量Clipboard作為類TClipboard的實例,從而使用戶在絕大多數(shù)場合不必自己去定義一個TClipboard的實例。

              利用剪貼板類可以進(jìn)行文本、圖像和部件的傳輸,剪貼板類為實現(xiàn)這些方法提供了相應(yīng)的屬性和方法。表7.2、表7.3列出了TClipboard屬性和方法的意義。

              表 7.2 TClipboard的屬性

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━

              屬 性 意 義

              ───────────────────────────

              AsText 保存剪貼板的文本,只有運行時才可設(shè)置

              FormatCount 可用剪貼板格式的數(shù)目

              Formats 可用剪貼板格式鏈

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━

              表 7.3 TClipboard的方法

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

              方 法 參 數(shù) 意 義

              ─────────────────────────────────────

              Clear 無 清除剪貼板的內(nèi)容

              Assign Source:TPersistent 把Source參數(shù)指定的對象拷貝到剪貼板,常

              用于圖形、圖像對象

              Open 無打開剪貼板,阻止其它應(yīng)用程序改變它的內(nèi)容

              Close 無 關(guān)閉打開的剪貼板

              SetComponent Source:TPersistent 把部件拷貝到剪貼板

              GetComponent Owner 從剪貼板取回一個部件并放置

              Parent :TPersistent

              SetAsHandle Format:Word 把指定格式數(shù)據(jù)的句柄交給剪貼板

              返回類型:THandle

              GetAsHandle Format:Word 返回剪貼板指定格式數(shù)據(jù)的句柄

              返回類型:THandle

              HasFormat Format:Word 判斷剪貼板是否擁有給定的格式

              返回類型:Boolean

              SetTextBuf Buffer:PChar 設(shè)置剪貼板的文本內(nèi)容

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

              剪貼板中可能的數(shù)據(jù)格式如下表。

              表 7.4 剪貼板數(shù)據(jù)格式及其意義

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

              數(shù)據(jù)格式 意 義

              ──────────────────────────────

              CF_TEXT 文本。每行以CF_LF結(jié)束,nil標(biāo)志文本結(jié)束

              CF_BITMAP Windows位圖

              CF_METAFILE Windows元文件

              CF_PICTURE TPicture類型的對象

              CF_OBJECT 任何TPersistent類型的對象

              ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

              利用TClipboard實現(xiàn)文本的傳輸使用AsText屬性和SetTextBuf方法。

              AsText屬性為非控件部件的剪貼板操作提供了方便。如:

              Clipboard. AsText := Form1.Caption ;

              把Form1的標(biāo)題拷貝到剪貼板。

              Label1.Caption := Clipboard.AsText;

              把剪貼板中的文本寫入Label1。

              SetTextBuf用于把超過255個字符的字符串拷入剪貼板。

              7.1.3 利用剪貼板傳輸圖像

              7.1.3.1 拷貝

              Image部件上的內(nèi)容和窗體上的圖形可以直接拷貝到剪貼板。圖像拷貝利用Clipboard的Assign方法。

              例如:

              Clipboard.Assign(Image1.Picture);

              把Image1上的圖像拷貝到剪貼板。

              7.1.3.2 剪切

              圖像的剪切是首先把圖像拷貝到剪貼板,而后在原位置用空白圖像進(jìn)行覆蓋。

              下面一段程序表示了圖像的剪切。

              procedure TForm1.Cut1Click(Sender: TObject);

              var

              ARect: TRect;

              begin

              Clipboard.Assign(Image1.Picture);

              with Image.Canvas do

              begin

              CopyMode := cmWhiteness;

              ARect := Rect(0, 0, Image.Width, Image.Height);

              CopyRect(ARect, Image.Canvas, ARect);

              CopyMode := cmSrcCopy;

              end;

              end;

              7.1.3.3 粘貼

              從剪貼板上粘貼圖像,首先檢測剪貼板上的數(shù)據(jù)格式。如果格式為CF_BITMAP,則調(diào)用目標(biāo)位圖的Assign 方法粘貼圖像。

              程序清單如下。

              procedure TForm1.PasteButtonClick(Sender: TObject);

              var

              Bitmap: TBitmap;

              begin

              if Clipboard.HasFormat(CF_BITMAP) then

              begin

              Bitmap := TBitmap.Create;

              try

              Bitmap.Assign(Clipboard);

              Image.Canvas.Draw(0, 0, Bitmap);

              finally

              Bitmap.Free;

              end;

              end;

              end;

              try...finally為資源保護(hù)塊,參第十二章。

              7.1.4 建立自己的剪貼板觀察程序

              在這一節(jié)中我們要建立一個自己的剪貼板觀察程序,用來保存截獲到剪貼板中的位圖。

              Windows允許用戶建立自己的剪貼板觀察程序,并把該程序添加到一個剪貼板觀察器鏈中。在鏈中,位置靠前的程序有義務(wù)把有關(guān)剪貼板的消息傳遞到緊隨其后的觀察程序。而處于鏈?zhǔn)椎某绦蛴蒞indows的消息循環(huán)機(jī)制直接把剪貼板消息發(fā)送過來。

              建立一個剪貼板觀察程序,首先該程序必須能響應(yīng)相應(yīng)的Windows消息。對于那些熟悉Microsoft公司Visual Basic的讀者來說,這是令他們頭疼而束手無策的地方。但Delphi在這方面卻有良好的表現(xiàn):利用關(guān)鍵字message,用戶可以將一個過程定義為響應(yīng)特定的Windows消息。如:

              procedure WMDrawClipboard(var Msg:TWMDrawClipboard);

              message WM_DRAWCLIPBOARD;

              可以響應(yīng)WM_DRAWCLIPBOARD消息。類TWMDrawClipboard是消息類Message 的子類。Delphi把所有的消息都重新進(jìn)行了定義,使用戶在使用時可以直接引用其便于記憶的數(shù)據(jù)成員,而不必再自己動手去分解消息。雖然這并不能算作是一個重大的改進(jìn),但卻體現(xiàn)了Delphi處處為用戶方便著想的特點。

              我們將要建立的程序目的是把截獲到剪貼板上的位圖保存下來。在本書的寫作過程中,這一工作是大量存在的。雖然利用Windows工具PaintBrush(畫筆),通過粘貼、保存等操作可以實現(xiàn)這一功能,但卻存在以下一些問題:

              1.程序頻繁切換影響效率,當(dāng)有大量位圖存在時更是如此;

              2.畫筆有一個很討厭的缺陷:當(dāng)剪貼板上的位圖比畫筆界面的客戶區(qū)大時,客戶區(qū)外的位圖被截斷。因而往往需要根據(jù)所截獲位圖的大小來調(diào)整畫筆客戶區(qū)的大小,并重新進(jìn)行粘貼。而如果開始就把畫筆客戶區(qū)調(diào)整到足夠大,又會覆蓋掉屏幕上一些有用的信息。

              為解決這些問題,我開發(fā)了下面的程序。程序啟動時,以極小化方式運行。此時只要剪貼板中存入位圖,則自動彈出一個對話框請求用戶保存。如果用戶希望查看確認(rèn),則可以雙擊運行程序圖標(biāo),選擇相應(yīng)按鈕,剪貼板中的位圖就會顯示在屏幕上。

              部件關(guān)鍵屬性設(shè)計如下:

              ClipSaveForm:

              Caption=‘Save Bitmap in Clipboard '

              Panel1:

              Align = ' Top '

              Image1:

              Align = ' Client '

              SaveDialog1:

              FileEditStyle = fsEdit

              FileName = '*.bmp'

              Filter = 'Bitmap Files(*.bmp)|*.bmp|Any Files(*.*)|*.*'

              InitialDir = 'c:\bmp'

              Title = 'Save Bitmap'

              程序主窗口是TForm派生類TClipSaveForm的實例。TClipSaveForm通過定義一些私有數(shù)據(jù)成員和過程,使響應(yīng)和處理Windows的相應(yīng)消息成為可能。下面是TClipSaveForm的類定義:

              type

              TClipSaveForm = class(TForm)

              SaveDialog1: TSaveDialog;

              Image1: TImage;

              Panel1: TPanel;

              Button1: TButton;

              SpeedButton1: TSpeedButton;

              SpeedButton2: TSpeedButton;

              Button2: TButton;

              procedure FormCreate(Sender: TObject);

              procedure FormDestroy(Sender: TObject);

              procedure Button1Click(Sender: TObject);

              procedure Button2Click(Sender: TObject);

              procedure SpeedButton1Click(Sender: TObject);

              procedure SpeedButton2Click(Sender: TObject);

              private

              { Private declarations }

              MyBitmap: TBitmap; { 保存截獲的位圖 }

              View: Boolean; { 判斷是否顯示 }

              NextViewerHandle: HWND; { 下一剪貼板觀察器的句柄 }

              procedure WMDrawClipboard(var Msg:TWMDrawClipboard);

              message WM_DRAWCLIPBOARD;

              procedure WMChangeCBChain(var Msg:TWMChangeCBChain);

              message WM_CHANGECBCHAIN;

              { 響應(yīng)Windows的剪貼板消息 }

              public

              { Public declarations }

              end;

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