国产18禁黄网站免费观看,99爱在线精品免费观看,粉嫩metart人体欣赏,99久久99精品久久久久久,6080亚洲人久久精品

計算機二級DELPHI基礎(chǔ):監(jiān)視剪貼板內(nèi)容

時間:2009-04-13 13:20:00   來源:無憂考網(wǎng)     [字體: ]
沖浪的年代,用過網(wǎng)絡(luò)螞蟻的人肯定不少,其中一項監(jiān)視剪貼板變化的功能讓人感覺到不少體貼。本文將介紹在Delphi中如何使用“體貼板”,來豐富自己的軟件功能。
  Windows使用剪貼板觀察器和觀察鏈。剪貼板觀察器是一個顯示剪貼板當前內(nèi)容的窗口。通常它應(yīng)該至少能顯示三種普通格式的內(nèi)容:文字CF_TEXT、位圖CF_BITMAP、元文件CF_METAFILEPICT。剪貼板觀察鏈是一系列相互獨立的剪貼板觀察窗口,它們都能夠接受當前發(fā)送到剪貼板的內(nèi)容。我們大致按照以下步驟在窗口中處理有關(guān)剪貼板的內(nèi)容。
  首先,使用SetClipboardViewer(HWND)函數(shù)向剪貼板觀察鏈中加入一個觀察窗口。當剪貼板的內(nèi)容發(fā)生變化時,該窗口會接收到一個WM_DRAWCLIPBOARD消息。該函數(shù)需要傳遞的參數(shù)是觀察窗口的句柄。返回值也是一個窗口句柄類型,標識了將要加入的下一個窗口。
  然后,響應(yīng)WM_DRAWCLIPBOARD消息處理剪貼板內(nèi)容的變化。
  最后,在程序退出或關(guān)閉時需要調(diào)用ChangeClipboardChain函數(shù)來將自己從觀察鏈中刪除。然后調(diào)用SendMessage函數(shù)把這些消息傳遞到觀察鏈中的下一個觀察窗口。函數(shù)ChangeClipboardChain原型如下:
  BOOL ChangeClipboardChain(
  HWND hWndRemove, //將要刪除的窗口的句柄
  HWND hWndNewNext //觀察鏈中下一個窗口的句柄
  );
  Delphi的clipbrd.pas單元中定義了一個類TClipboard,它封裝了Windows剪貼板,簡化了大量復(fù)雜的處理過程。我們在程序中可以直接調(diào)用全局函數(shù)Clipboard,該函數(shù)用于返回TClipboard對象實例,使用這個實例對剪貼板進行剪切、復(fù)制和粘貼等操作。下面是TClipboard對象的幾個常用的方法和屬性的簡單介紹。
  方法:
  Assign:將指定的對象放入剪貼板中。
  Open:打開剪貼板,防止其他程序改寫剪貼板。在向剪貼板加入多項數(shù)據(jù)時尤其有用。
  Close:關(guān)閉剪貼板。應(yīng)該與打開剪貼板成對使用。
  Clear:清空剪貼板。
  GetAsHandle:返回剪貼板中指定格式數(shù)據(jù)的句柄。使用前必須打開剪貼板。
  GetComponent:返回剪貼板中的一個控件。Delphi自己使用得多。
  HasFormat:查詢剪貼板中是否有指定格式的內(nèi)容。
  屬性:
  AsText:用于讀寫剪貼板文字內(nèi)容。
  FormatCount:讀剪貼板中數(shù)據(jù)格式的種數(shù)。
  Formats:返回剪貼板中各種格式的列表。
  此外,Delphi中的許多控件中也封裝了有關(guān)剪貼板處理的操作。下面的一個處理剪貼板的簡單例子,只是將剪貼板的文字內(nèi)容顯示為窗口標題。
  unit Unit1;
  interface
  uses
  Windows, Messages, SysUtils, Classes,
  Graphics, Controls, Forms, Dialogs,
  Clipbrd;//加入clipbrd單元
  type
  TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
  procedure FormClose(Sender: TObject;
  var Action: TCloseAction);
  private
  { Private declarations }
  public
  NextClipHwnd:HWND;//觀察鏈中下一個窗口句柄
  procedure WMDrawClipBoard
  (var AMessage:TMessage);
  message WM_DRAWCLIPBOARD;
  //處理WM_DRAWCLIPBOARD消息過程
  end;
  var
  Form1: TForm1;
  implementation
  {$R *.DFM}
  { TForm1 }
  procedure TForm1.WMDrawClip
  Board(var AMessage: TMessage);
  begin
  //將WM_DRAWCLIPBOARD
  消息傳遞到下一個觀察鏈中的窗口
  SendMessage(NextClipHwnd,AMessage.
  Msg,AMessage.WParam,AMessage.LParam);
  //查詢剪貼板中特定格式的數(shù)據(jù)內(nèi)容
  if (Clipboard.HasFormat(CF_TEXT) or
  Clipboard.HasFormat(CF_OEMTEXT)) then
  begin
  //處理剪貼板中內(nèi)容
  Caption:=Clipboard.asText;
  end;
  end;
  procedure TForm1.FormCreate(Sender: TObject);
  begin
  //獲得觀察鏈中下一個窗口句柄
  NextClipHwnd:=SetClipBoardViewer(Handle);
  end;
  procedure TForm1.FormClose
  (Sender: TObject; var Action: TCloseAction);
  begin
  //從觀察鏈中刪除本觀察窗口
  ChangeClipboardChain(Handle,NextClipHwnd);
  //將WM_DRAWCLIPBOARD
  消息傳遞到下一個觀察鏈中的窗口
  SendMessage(NextClipHwnd,WM_
  CHANGECBCHAIN,Handle,NextClipHwnd);
  end;
  end.
  需要注意的是,在處理剪貼板內(nèi)容變化的消息WM_DRAWCLIPBOARD的過程和關(guān)閉窗口事件中使用函數(shù)sendmessage把WM_DRAWCLIPBOARD或WM_CHANGECBCHAIN消息傳遞到觀察鏈中的下一個窗口是必要的,否則有可能其他窗口不能獲得類似消息。另外,在使用網(wǎng)絡(luò)螞蟻時筆者曾經(jīng)碰到不能設(shè)置剪貼板格式的情況,在此提醒讀者注意檢查RegisterClipboardFormat等函數(shù)的返回值。