用不着截获消息,使用TWinControl.OnEnter事件就可以了.

解决方案 »

  1.   

    用不着截获消息,使用TWinControl.OnEnter事件就可以了.
      

  2.   

    多個控件可以共用一個OnEnter事件代碼
      

  3.   

    unit comm_unit;interface
    //************************************ 要加下一行
    procedure check_key(var key:char);
    //************************************implementationprocedure check_key(var key:char);
    begin
      if not (key in ['0'..'9','.',#8]) then
        key:=#0;
    end;end.
      

  4.   

    好像沒這個必要, OnEnter 已封裝了消息, 也就是在處理消息.
    且窗體好像沒有"它所包含的組件跳焦點的消息" ? (有否?)
      

  5.   

    试着重载 Form的SetFocusedControl方法看看
      TForm1 = class(TForm)
      ...
        function SetFocusedControl(Control: TWinControl): Boolean; override ;
      end ;function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
    begin
      beep ;
      Result := inherited SetFocusedControl(Control) ;
    end;
    我是对FocusControl进行追查后得到的 :)
      

  6.   

    我在Edit的通知消息中没找到,而且在VCL中截获通知消息比较危险.看来只能对所有的TEdit进行SubClass了参见API:SetWindowLong和GetWindowLong,消息是WM_SETFOCUS.
    感觉还是用OnEnter事件方便.
      

  7.   

    同意 yyfhz(火山) 
    在TWinControl得WndProc中
    case Message.Msg of
        WM_SETFOCUS:
          begin
            Form := GetParentForm(Self);
            if (Form <> nil) and not Form.SetFocusedControl(Self) then Exit;
          end;而TCustomForm得SetFocusedControl为一Virtual方法
    所以覆盖SetFocusedControl就可对WM_SETFOCUS消息先作一些处理,unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Label1: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Edit4: TEdit;
        Edit5: TEdit;
        Edit6: TEdit;
      private
        { Private declarations }
      public
        { Public declarations }
        function SetFocusedControl(Control: TWinControl): Boolean; override;
      end;var
      Form1: TForm1;implementation{$R *.dfm}function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
    begin
      if Control is TEdit then
        Label1.Caption := Control.Name;
      Result := Inherited SetFocusedControl(Control);
    end;end.