如何拦载Edit的右击消息?注意:我要求此Edit必须是设计时放在表单上的,而不是运行时生成的!(100分)

  • 主题发起人 主题发起人 zfs88
  • 开始时间 开始时间
Z

zfs88

Unregistered / Unconfirmed
GUEST, unregistred user!
如何拦载Edit的右击消息?注意:我要求此Edit必须是设计时放在表单上的,而不是运行时生成的!
 
Edit的右击什么消息,你在设计时弹出的是Delphi的菜单
 
这是不可能的.
TEdit对鼠标右键的响应是固定的,除非从TEdit继承后编写如下的方法
procedure WMRButtonDown(var Msg: TMessage); message WM_RButtonDown;
begin
.
end;
 
要是从TEdit继承的话,那么此表单上的Edit可以由此派生类来生成(好象只能在运行时生成),
运行时生成。这种情况下,我知道可以在派生类中自定义消息,来拦截系统原有消息。

我的目的是:拦截设计时放在表单上的Edit的右击消息,而不是运行时生成的Edit的右击消息。


 
你难道想拦截delphi的消息?即使这样你也可以在该delphi的源代码中
修改(在哪里需要你自己找)!肯定有,因为有些控件的右键中项目就
不一样,显然DELPHI作了处理。
 
很简单,首先写一个事件处理函数,然后在创建的时候连接进去就行了啊。
看下面的代码。

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure OnEditMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.OnEditMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then
begin
ShowMessage((Sender as TEdit).Text);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
With TEdit.Create(Application) do
begin
Parent := Form1;
Left := 10;
Top := 10;

OnMouseDown := OnEditMouseDown; <---连接事件处理程序

Show;
end;
end;
 
在类中定义
procedure newwndproc(var Message: TMessage);
oldwndproc:Twinmethod;
在formcreate中
oldwndproc:=edit1.windowproc;
edit1.wndproc:=newwndproc
procedure TForm1.ourwndproc(var Message: TMessage);
begin
if message.Msg=WM_RButtonDown then
...;
oldwndproc(message);
end;
 
要想在设计时改变TEdit的右键菜单,必须自己调用IDE的API接口做一个元件编辑器,
然后注册这个编辑器。
 
接受答案了.
 
后退
顶部