Delphi Firemonkey Frames - Как получить событие OnEnter и OnExit об использовании фрейма - PullRequest
0 голосов
/ 28 октября 2018

Использование Delphi Tokyo и FireMonkey: у меня есть много разных фреймов в форме, и я хотел бы установить некоторые переменные уровня формы, так как фокус на форме меняется в разных фреймах и из них.Ex.У меня есть кнопка «Вставить» в форме, и я хочу включить ее, если рамка, в которой находится пользователь, позволяет вставлять, а затем снова отключить ее, оставив фокус рамки.В кадре есть события OnEnter и OnExit, но они никогда не выполняются.Очевидно, что на кадрах есть изменения и т. Д.

Ответы [ 2 ]

0 голосов
/ 29 октября 2018
type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormFocusChanged(Sender: TObject);
  private
    FFocusedFrame: TFrame;
  public
    { Public declarations }
  end;

...

procedure TForm1.FormFocusChanged(Sender: TObject);
var
  LParent: TFmxObject;
begin
  if Focused <> nil then
  begin
    LParent := Focused.GetObject.Parent;
    while (LParent <> nil) and not (LParent is TFrame) do
      LParent := LParent.Parent;
    if (LParent <> nil) and (FFocusedFrame <> LParent) then
    begin
      FFocusedFrame := TFrame(LParent);
      Label1.Text := FFocusedFrame.Name;
    end;
  end;
end;

end.

Нет необходимости подключать OnEnter и OnExit для каждого элемента управления

0 голосов
/ 28 октября 2018

Кадры не могут получать фокус, и поэтому они не генерируют события OnEnter() или OnExit().

После размещения рамки на форме вы можете создать два общих обработчика событий для всехотредактируйте элементы управления (или другие элементы управления вводом в кадре)

procedure TForm14.Frame112EditExit(Sender: TObject);
begin
  Button1.Enabled := False;
end;

procedure TForm14.Frame112EditEnter(Sender: TObject);
begin
  Button1.Enabled := True;
end;

и свяжите события OnEnter() и OnExit() всех этих элементов управления для редактирования с этими двумя обработчиками событий.

Я былне уверены, что события запускаются в правильном порядке при переходе от одного элемента управления редактирования к другому, но короткий тест (в Windows) показывает, что OnExit() элемента управления, который мы оставляем, запускается до OnEnter() элемента управления, который мы вводим, как и ожидалось.

...