如何截获RichEdit上的copy,paste消息(50分)

  • 主题发起人 主题发起人 面条
  • 开始时间 开始时间

面条

Unregistered / Unconfirmed
GUEST, unregistred user!
用WM_COPY,WM_PASTE无作用.
 
真的吗? 我试试,
你把你的代码贴出来。
 
自己用spy++截获一下,看看是什么消息不就知道了
 
to cAKK:
spy++也找不到,好象是他的自定义消息。
难道我需要截获WM_KEYDOWN判断ctrl+C是否按下?
另,选中一段文本后用鼠标拖动,这时RichEdit什么
消息也没接受到,消息发给了另一个窗口.

有谁能解释这些,另外加分!
 
我用spy++捕获到了"写字版"的WM_COPY,WM_PASTE消息
 
我试了一下,确实是这样,当 ctrl+c ctrl+v 时, 只触发
CN_KEYDOWN CN_CHAR CN_KEYUP 事件,但确实有 copy paste 发生,
 
我要解决这个问题就使用ClipBoardViewer Chain的技术,将你的程序
加入系统的ClipBoardViewer Chain中:
FwndNextViewer := SetClipboardViewer(Self.Handle);
然后相应这两个消息:
procedure WMChangeCBChain(var Msg: TMessage);
message WM_CHANGECBCHAIN;
procedure WMDrawClipBoard(var Msg: TMessage);
message WM_DRAWCLIPBOARD;
在WMDrawClipBoard事件中处理剪贴板变化的事件。
在程序退出时使用:
ChangeClipboardChain(Self.Handle, FwndNextViewer);
 
监视剪贴板是肯定行的,

但现在不明白 delphi 中 RichEdit 的机制,
delphi 中的 RichEdit 是 1.0 版的(也就是用的 RichEd32.dll),
RichEdit.pas 中也定义了 2.0 版的一些常量和结构(RichEd20.dll)
msdn 说, RichEdit 2.0 支持 WM_COPY|CUT|PASTE.
所以写字板可以,??
 
》》监视剪贴板是肯定行的
好象错了, 怎么能知道是对某一个 RichEdit 做的呢?
 
另,选中一段文本后用鼠标拖动,这时RichEdit什么消息也没接受到,消息发给了另一个窗口.有谁能解释这些,另外加分!
 
提提前.............
 
从Delphi的Source目录中ComCtrls.pas的

property OnSaveClipboard: TRichEditSaveClipboard
read FOnSaveClipboard
write FOnSaveClipboard;

发现你的问题
 
附加功能 将问题提前
 
昔人已乘黄鹤去
 
后退
顶部