如何让禁用的控件保持不透明?

How can I keep my disabled controls opaque?

我注意到当我禁用控件 (controlName.enabled := false;) 时它们会自动变为半透明。

有没有办法强制它们保持不透明?

我试过 controlName.Opacity := 1; 但似乎没有任何效果。

我也试过将控件嵌入到 TLayout 中,然后禁用 TLayout,但半透明效果似乎被嵌入的控件拾取了。

[编辑]

这是我所看到的示例在这种情况下,它覆盖了一个包含大国会大厦 F 的 TLabel。

将您的控件 (TRectangle) 设置为 hittest := false;

它将不再捕获鼠标事件,而父控件会。 对于其他控件,您可以将其与 Tabstop:=false 结合使用。现在它将不会获得焦点,因此大多数功能将被禁用。

您可以将 DisabledOpacity 设置为 1。

查看向表单添加两个按钮的示例:

procedure TForm2.Button2Click(Sender: TObject);
begin
  Button1.DisabledOpacity := 1;
  Button1.Enabled := not Button1.Enabled;
end;

这是一个受保护的成员,因此您必须在您的代码中覆盖该控件。

 TButton = class(FMX.Stdctrls.TButton)
 //
  end;

  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

DisabledOpacity 是 TControl 的私有 属性,您可以在 FMX.Controls.TControl.

中找到它

您可以创建自定义 class 的 tcontrol,其中 DisabledOpacity 为 public 并将其设置为您的控件,例如(对每个 TControl 后代):

  TmyC = class(TControl)
  public
    property DisabledOpacity;
  end;

...

  TmyC(Button1).DisabledOpacity := 1;