Fab*_*zio 2 delphi paste delphi-2007 windows-messages
我需要截取WM_PASTE一个TEdit放在一个TFrame后代类中的组件的消息.
如果不满足条件,我想进行粘贴操作.
有没有办法在帧级别执行此操作?(我的意思是,没有声明一个TEdit人的后代)
有没有办法在帧级别执行此操作?(我的意思是,没有声明一个
TEdit人的后代)
WM_PASTE直接发送到TEdit窗口,TFrame永远不会看到它,所以你必须TEdit直接子类化以拦截消息.你可以:
有TFrame处理函数分配给了TEdit的WindowProc财产.如果你只有少数TEdits子类,这是一个简单的方法,但是TEdit你想要子类的s 越多越复杂:
type
TMyFrame = class(TFrame)
Edit1: TEdit;
...
procedure FrameCreate(Sender: TObject);
...
private
PrevWndProc: TWndMethod;
procedure EditWndProc(var Message: TMessage);
...
end;
procedure TMyFrame.FrameCreate(Sender: TObject);
begin
PrevWndProc := Edit1.WindowProc;
Edit1.WindowProc := EditWndProc;
...
end;
procedure TMyFrame.EditWndProc(var Message: TMessage);
begin
if Message.Msg = WM_PASTE then
begin
if SomeCondition then
Exit;
end;
PrevWndProc(Message);
end;
Run Code Online (Sandbox Code Playgroud)定义内插类是本地只是TFrame的单元,上述TFrame类声明,这将拦截WM_PASTE对于每 TEdit对框架:
type
TEdit = class(Vcl.StdCtrls.TEdit)
procedure WMPaste(var Message: TMessage); message WM_PASTE;
end;
TMyFrame = class(TFrame)
Edit1: TEdit;
Edit2: TEdit;
...
end;
procedure TEdit.WMPaste(var Message: TMessage);
begin
if not SomeCondition then
inherited;
end;
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |