Delphi Firemonkey Frames-如何获取框架用法的事件OnEnter和OnExit

时间:2018-10-28 06:56:34

标签: delphi firemonkey

使用Delphi Tokyo和FireMonkey: 我在表单上有很多不同的框架,并希望设置一些表单级别的变量,因为着重于表单在不同框架中的变化。 例如我在表单上有一个“插入”按钮,如果用户所在的框架允许插入,则想启用它,然后在离开框架焦点时再次禁用它。 框架上有OnEnter和OnExit事件,但是它们从不执行。 显然,框架上有编辑等内容。

2 个答案:

答案 0 :(得分:4)

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.

...

6 10 20
2 10 8
2 2 14

无需为每个控件连接OnEnter和OnExit

答案 1 :(得分:2)

框架无法获得焦点,因此不会触发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()在{{1}之前被触发},就像预期的那样。