В delphi можно было узнать, куда уходит фокус в обработчике OnExit через
GetParentForm(TControl(Sender)).ActiveControl
В Lazarus это не работает.
По-видимому отличается очередность назначения свойств и вызове событий при переходе фокуса.
Как можно получить контрол, куда уходит фокус в обработчике OnExit?
WinXP SP3 Laz 0.9.29 QT, Win32 (на двух машинах).
Как узнать куда уходит фокус
Модератор: Модераторы
Re: Как узнать куда уходит фокус
Накидал на форму пару штук контролов и таймер в обработчике таймера пишу типа так:
Типа при тайминге в заголовке формы будем видеть какой в данный момент контрол имеет фокус ввода что то подобное можешь написать в любом обработчике:
вот для ястности привожу весь код формы:
Код: Выделить всё
procedure TForm1.Timer1Timer(Sender: TObject);
var I:Integer;
begin
for I:=0 to ComponentCount - 1 do
begin
if (Components[i] is TWinControl) and
(Components[i] as TWinControl).Focused then
Form1.Caption:=Components[i].Name;
end;
end;
Типа при тайминге в заголовке формы будем видеть какой в данный момент контрол имеет фокус ввода что то подобное можешь написать в любом обработчике:
вот для ястности привожу весь код формы:
Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
RadioButton1: TRadioButton;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{ TForm1 }
procedure TForm1.Timer1Timer(Sender: TObject);
var I:Integer;
begin
for I:=0 to ComponentCount - 1 do
begin
if (Components[i] is TWinControl) and
(Components[i] as TWinControl).Focused then
Form1.Caption:=Components[i].Name;
end;
end;
initialization
{$I unit1.lrs}
end.
Re: Как узнать куда уходит фокус
не совсем то что надо, но да, Focused уже стоит на другом контроле при обработке onExit.
спасибо.
спасибо.
