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;

你可能感兴趣的:(delphi 剪贴板操作,读取剪贴板内容)