如何获取子控件的子控件获得和失去焦点的消息
怎么获取子控件的子控件获得和失去焦点的消息?
比如现有 dtp1: TDateTimePicker;当我选择年份的时候,点击一下年份,会出来个编辑框,我怎么能够获得这个年份编辑框得到焦点和失去焦点的消息?
------解决方案--------------------
如果想在该控件获得或失去焦点时写代码,可以写该控件的oncreate或onexit事件
------解决方案--------------------
那他不是有onenter和onexit事件嘛。。
------解决方案--------------------
------解决方案--------------------
学习一下。。谢谢
------解决方案--------------------
想自己做一个精简的软键盘,发现最好 win能提供所有焦点变换的历史列表
假设我要对 应用a的控件b 进行软键盘输入,则需要把焦点从b移到软键盘程序的按钮c,c的点击事件才能向前一个焦点控件b发送消息
但是,目前好像没有api能 取得前一个焦点控件是谁!
比如现有 dtp1: TDateTimePicker;当我选择年份的时候,点击一下年份,会出来个编辑框,我怎么能够获得这个年份编辑框得到焦点和失去焦点的消息?
------解决方案--------------------
如果想在该控件获得或失去焦点时写代码,可以写该控件的oncreate或onexit事件
------解决方案--------------------
那他不是有onenter和onexit事件嘛。。
------解决方案--------------------
unit Unit1;
interface
uses
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;
implementation
uses 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.
------解决方案--------------------
学习一下。。谢谢
------解决方案--------------------
想自己做一个精简的软键盘,发现最好 win能提供所有焦点变换的历史列表
假设我要对 应用a的控件b 进行软键盘输入,则需要把焦点从b移到软键盘程序的按钮c,c的点击事件才能向前一个焦点控件b发送消息
但是,目前好像没有api能 取得前一个焦点控件是谁!