TButton的 BN_SETFOCUS/BN_KILLFOCUS 分别在什么时候触发?
我的程序BN_SETFOCUS压根不触发,
       BN_KILLFOCUS 在得到焦点是触发,这是怎么回事

解决方案 »

  1.   

    TO: TommyTong(童童--青锋软件工作室)
    我强烈关注!!
    ^_^
      

  2.   

    要收到BN_SETFOCUS, BN_KILLFOCUS,需要TButton的Style含有BS_NOTIFY
    以下刚试过
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, TestButton;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
        procedure WMCommand(var msg: TMessage); message WM_COMMAND;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.WMCommand(var msg: TMessage);
    begin
      if Msg.WParamHi = BN_SETFOCUS then
        Memo1.Lines.Add(FindControl(msg.LParam).Name + ': BN_SETFOCUS')
      else if Msg.WParamHi = BN_KILLFOCUS then
        Memo1.Lines.Add(FindControl(msg.LParam).Name + ': BN_KILLFOCUS')
      else Inherited;
    end;procedure TForm1.Button4Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to ComponentCount - 1 do
        if Components[i] is TButton then
            SetWindowLong(TButton(Components[i]).Handle, GWL_STYLE, GetWindowLong(Button1.Handle, GWL_STYLE) or BS_NOTIFY); 
    end;end.
      

  3.   

    学习中;
    多谢 xzgyb(老达摩) 兄.