Как узнать куда уходит фокус

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как узнать куда уходит фокус

Сообщение ctm » 06.04.2010 16:12:54

В delphi можно было узнать, куда уходит фокус в обработчике OnExit через
GetParentForm(TControl(Sender)).ActiveControl
В Lazarus это не работает.
По-видимому отличается очередность назначения свойств и вызове событий при переходе фокуса.

Как можно получить контрол, куда уходит фокус в обработчике OnExit?

WinXP SP3 Laz 0.9.29 QT, Win32 (на двух машинах).
ctm
новенький
 
Сообщения: 21
Зарегистрирован: 03.03.2010 16:34:29

Re: Как узнать куда уходит фокус

Сообщение Maxizar » 06.04.2010 16:33:37

Накидал на форму пару штук контролов и таймер в обработчике таймера пишу типа так:

Код: Выделить всё
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.

Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Как узнать куда уходит фокус

Сообщение ctm » 07.04.2010 09:37:33

не совсем то что надо, но да, Focused уже стоит на другом контроле при обработке onExit.
спасибо.
ctm
новенький
 
Сообщения: 21
Зарегистрирован: 03.03.2010 16:34:29


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

Рейтинг@Mail.ru