//全局变量
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;
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;