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.
//************************************ 要加下一行
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.
且窗體好像沒有"它所包含的組件跳焦點的消息" ? (有否?)
TForm1 = class(TForm)
...
function SetFocusedControl(Control: TWinControl): Boolean; override ;
end ;function TForm1.SetFocusedControl(Control: TWinControl): Boolean;
begin
beep ;
Result := inherited SetFocusedControl(Control) ;
end;
我是对FocusControl进行追查后得到的 :)
感觉还是用OnEnter事件方便.
在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.