监视剪贴板的代码是在网上找的~
用的就是把程序加入剪贴板观察链的方法~
出错的地方在这个过程中~
就是剪贴板发生变化时响应的代码~procedure TForm1.WMDrawClipBoard(var AMessage: TMessage);
var
buf: string;
hMem: DWORD;
txtPtr: PChar;
begin
SendMessage(NextClipHwnd,AMessage.
Msg,AMessage.WParam,AMessage.LParam);
Try
with TClipboard.Create do
begin
hMem := GetAsHandle(CF_TEXT);
if hMem = 0 then
exit;
txtPtr := GlobalLock(hMem);
buf := StrPas(txtPtr);
GlobalUnlock(hMem);
Free;
end;
{上面的代码也这样写过:
if (Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT)) then
buf := Clipboard.AsText;}
//功能代码
except
end;
end;我用了两种方式来按照文本格式取得剪贴板中的信息~
无论用哪种方式~
只要剪贴板中的数据比较大(比如屏幕截图)~
就会出现Stack Overflow的错误~
然后程序自动关闭~
调试时停在了Try后面~
求教如何才能避免~
用的就是把程序加入剪贴板观察链的方法~
出错的地方在这个过程中~
就是剪贴板发生变化时响应的代码~procedure TForm1.WMDrawClipBoard(var AMessage: TMessage);
var
buf: string;
hMem: DWORD;
txtPtr: PChar;
begin
SendMessage(NextClipHwnd,AMessage.
Msg,AMessage.WParam,AMessage.LParam);
Try
with TClipboard.Create do
begin
hMem := GetAsHandle(CF_TEXT);
if hMem = 0 then
exit;
txtPtr := GlobalLock(hMem);
buf := StrPas(txtPtr);
GlobalUnlock(hMem);
Free;
end;
{上面的代码也这样写过:
if (Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_OEMTEXT)) then
buf := Clipboard.AsText;}
//功能代码
except
end;
end;我用了两种方式来按照文本格式取得剪贴板中的信息~
无论用哪种方式~
只要剪贴板中的数据比较大(比如屏幕截图)~
就会出现Stack Overflow的错误~
然后程序自动关闭~
调试时停在了Try后面~
求教如何才能避免~
解决方案 »
- 新手菜鸟求问 自定义组件事件如何写?
- 如何检测某些软件已安装并测试
- 请问一下4句C语言的话,在delphi中怎么翻译呢?
- 我要做一个通用的票据打印的程序,想用fastReport实现,希望高手传授思路,万分感激!
- 一个问题,想了好久,没有答案,求助!
- 关于delphi7如何链接access数据库
- delphi 中OLE打印加页眉
- 请问高手:DELPHI7中的代码编辑器中不能输入中文,只能输入英文?如何解决?
- 请教基本概念的问题
- 我要在当前窗体中新起一个对话框,请问如何引用当前窗体的控件?
- Dbgrid怎么才能输入密码?
- 有一个程序A,一个COM组件B,我写的程序C,请问C如何监听A调用B的参数和返回值?
贴出的那段代码没有问题~
是在程序的其它地方的一个未知问题~(-_-!!没时间找了~)
使NextClipHwnd总是指向Form1自身~
造成了Stack Overflow~
重写相关代码后正常了~就一个人回帖~
还是要给分的~