我想在combobox中捕捉MouseUp事件。试过重定义这个组件,在publish中加property OnMouseUp。但结果没用,程序一运行就会执行三次OnMouseUp, 然后都是在click combobox上的按钮才会触发这个事件,而我是希望在click edit的时候去触发它。后来试着重新定义这个mouseup的消息(用了WM_LBUTTONUP),放弃Tcontorl中OnMouseUp的定义。结果还是一样。
是否哪位高人能给我指点一二? 先谢谢了。
是否哪位高人能给我指点一二? 先谢谢了。
if not IsExcute then exit;
可能就可以
可以自定义一个消息
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
CB_GETEDITSEL = $0140;
CB_MOURSEUP = $0141;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Edit1: TEdit;
procedure ComboBox1Change(Sender: TObject);
private
procedure WM_naner_china(var message: TMessage); message CB_GETEDITSEL;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure tform1.WM_naner_china(var message: TMessage);
begin
ShowMessage('消息触发');
//处理代码
end;
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
//sendMessage(ComboBox1.Handle, CB_GETEDITSEL,0,0);
form1.Perform(CB_GETEDITSEL,0,0)
end;end.
定义:
FOldWinProc : TWndMethod;
Procedure MouseUpWinProc(var message : TMessage);
procedure TForm1.FormCreate(Sender: TObject);
begin
....
....
FOldWinProc := Combobox1.WindowProc;
Combobox1.WindowProc := MouseUpWinProc;
end; procedure TForm1.MouseUpWinProc(var message: TMessage);
begin
case message.msg of
WM_LBUTTONUP :
....//需要处理的代码
end; FOldWinProc(message);
end;