1. 程式人生 > >delphi 剪貼簿操作,讀取剪貼簿內容

delphi 剪貼簿操作,讀取剪貼簿內容

//全域性變數
NextClipHwnd:HWND;//剪貼簿觀察鏈中下一個視窗控制代碼   

procedure TForm1.FormShow(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;

procedure WMDrawClipBoard (var AMessage:TMessage);  message WM_DRAWCLIPBOARD;  //處理WM_DRAWCLIPBOARD剪貼簿訊息過程

procedure TCardForm.WMDrawClipBoard(var AMessage: TMessage);
var emailstr : string;
begin
  //將WM_DRAWCLIPBOARD訊息傳遞到下一個觀察鏈中的視窗
  SendMessage(NextClipHwnd,AMessage.Msg,AMessage.WParam,AMessage.LParam);

  //查詢剪貼簿中特定格式的資料內容
  if (PageControl.ActivePageIndex = 1) and
     chkClipboard.Checked and
     ((Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT))) then
  begin
    //處理剪貼簿中內容
    emailstr := Clipboard.AsText;

    if pos('@', emailstr) > 0 then //必須有@
    begin
      if pos(cmbSeparator.Text, emailStr) > 0 then  //如果有分隔符
        emailstr := copy(emailstr, 1, pos(cmbSeparator.Text, emailStr) - 1);  //取得email地址
      if not MailURLMayBeInvalid(emailStr) then
      begin
        //增加到列表中
        memEmailList.Lines.Add(Clipboard.AsText);
        beep;
        memEmailList.SelStart := 65535;
      end;
    end;  //if pos(emailstr, '@') > 0 then
    //Clipboard.Clear;
  end;
end;