我想在combobox中捕捉MouseUp事件。试过重定义这个组件,在publish中加property OnMouseUp。但结果没用,程序一运行就会执行三次OnMouseUp, 然后都是在click combobox上的按钮才会触发这个事件,而我是希望在click edit的时候去触发它。后来试着重新定义这个mouseup的消息(用了WM_LBUTTONUP),放弃Tcontorl中OnMouseUp的定义。结果还是一样。 
    是否哪位高人能给我指点一二? 先谢谢了。

解决方案 »

  1.   

    学习,不过是否是一下加个变量IsExcute不需要执行OnMouseUp前是为FALSE需要执行时 TRUE在OnMouseUp事件中加
    if not IsExcute then exit;
    可能就可以
      

  2.   

    不是很清楚
    可以自定义一个消息
    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.
      

  3.   

    谢谢各位的热心发言。其实我主要是想在焦点离开时得到combobox中选中的文本,就是待修改的文本(鼠标点一下按钮,选中内容被该按钮的caption替换掉)。前面说的好像都达不到效果,onchange, oncloseup都不是在我希望的时候响应。
      

  4.   

    呵呵,已经自己解决了。
    定义:
        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;
      

  5.   

    exit没用的,早试过了。exit响应的时候,焦点已不在combobox,不能获得选中的内容