比如现有 dtp1: TDateTimePicker;当我选择年份的时候,点击一下年份,会出来个编辑框,我怎么能够获得这个年份编辑框得到焦点和失去焦点的消息?

解决方案 »

  1.   

    如果想在该控件获得或失去焦点时写代码,可以写该控件的oncreate或onexit事件
      

  2.   

    那他不是有onenter和onexit事件嘛。。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, ExtCtrls, StdCtrls;type
      TForm1 = class(TForm)
        dtp1: TDateTimePicker;
        procedure dtp1DropDown(Sender: TObject);
        procedure dtp1CloseUp(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses CommCtrl;{$R *.dfm}var
      g_hHook: HHOOK;function CallWndProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT stdcall;
      function IsYearEdit(h: hwnd): Boolean;
      var
        b: array[0..255] of Char;
      begin
        Result := False;
        GetClassName(h, b, 256);
        if b <> 'Edit' then Exit;
        Result := GetParent(h) = DateTime_GetMonthCal(Form1.dtp1.Handle);
      end;
    begin
      if code = HC_ACTION then
      begin
        Result := 0;
        if PCWPStruct(lParam)^.message = WM_SETFOCUS then
        begin
          if IsYearEdit(PCWPStruct(lParam)^.hwnd) then
          begin
            Form1.Text := '获得焦点'
          end
        end
        else if PCWPStruct(lParam)^.message = WM_KILLFOCUS then
          if IsYearEdit(PCWPStruct(lParam)^.hwnd) then
          begin
            Form1.Text := '失去焦点'
          end
      end else
        Result := CallNextHookEx(g_hHook, code, wParam, lParam)
    end;procedure TForm1.dtp1DropDown(Sender: TObject);
    begin//dtp1的OnDropDown事件
      g_hHook := SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, hInstance, GetCurrentThreadId)
    end;procedure TForm1.dtp1CloseUp(Sender: TObject);
    begin//dtp1的OnCloseUp事件
      UnhookWindowsHookEx(g_hHook)
    end;end.
      

  4.   

    想自己做一个精简的软键盘,发现最好 win能提供所有焦点变换的历史列表假设我要对 应用a的控件b 进行软键盘输入,则需要把焦点从b移到软键盘程序的按钮c,c的点击事件才能向前一个焦点控件b发送消息
    但是,目前好像没有api能 取得前一个焦点控件是谁!
      

  5.   

    非常感谢,我后来也是用钩子做的,用的是WH_CBT