如何让禁用的控件保持不透明?
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;
我注意到当我禁用控件 (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;