【问题标题】:Prevent control animation when setting RadioButton.Checked设置 RadioButton.Checked 时防止控件动画
【发布时间】:2016-02-14 09:19:55
【问题描述】:

在显示该表单之前,我在第二个表单上设置了两个单选按钮的 Checked 属性。每次单击按钮以设置 Checked 属性并显示我反转(“NOT”)每个单选按钮的 Checked 的表单。然后在显示表单后,可以清楚地看到单选按钮发生的动画(已更改的已检查属性)。它不会在第一次运行时发生,而是在表单的每个后续显示中发生。

我想阻止动画,只是让单选按钮在显示表单时显示新设置的选中状态。有办法吗?

将单选按钮放在禁用的面板上或在设置 Checked 之前使其不可见是行不通的。

表格1:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.RadioButton1.Checked := not Form2.RadioButton1.Checked;
  Form2.RadioButton2.Checked := not Form2.RadioButton1.Checked;

  Form2.Show;
end;

Form1 DFM:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 81
  ClientWidth = 249
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 36
    Top = 24
    Width = 157
    Height = 25
    Caption = 'Set Radios and Show Form2'
    TabOrder = 0
    OnClick = Button1Click
  end
end

表格2:

type
  TForm2 = class(TForm)
    Button1: TButton;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  Hide;
end;

end.

Form2 DFM:

object Form2: TForm2
  Left = 0
  Top = 0
  Caption = 'Form2'
  ClientHeight = 131
  ClientWidth = 176
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 44
    Top = 90
    Width = 75
    Height = 25
    Caption = 'Hide'
    TabOrder = 0
    OnClick = Button1Click
  end
  object RadioButton1: TRadioButton
    Left = 38
    Top = 20
    Width = 113
    Height = 17
    Caption = 'RadioButton1'
    TabOrder = 1
  end
  object RadioButton2: TRadioButton
    Left = 38
    Top = 44
    Width = 113
    Height = 17
    Caption = 'RadioButton2'
    TabOrder = 2
  end
end

【问题讨论】:

  • 您为什么要以这种方式选中和取消选中您的单选按钮?您确实知道单选按钮的目的是能够简单地选中一个,其余的将自动取消选中。但是由于您的代码已经手动执行此操作,因此您可能希望将这些单选按钮替换为复选框。您已经有代码可以在它们之间切换它们的选中状态。与单选按钮不同的复选框没有任何动画。
  • 代码是一个实验,绝不是项目的一部分,也不是我会在项目中使用的东西。设置它是为了查看动画的行为方式,这就是我偶然发现它的方式。我想知道“问题”是否有某种解决方法
  • 我是这么认为的,因此我只发表了评论。无论如何,我认为不可能完全禁用单选按钮动画,因为它似乎只是普通胜利控制的包装。因此控制是否动画是由 Windows 自己完成的。

标签: delphi


【解决方案1】:

TRadioButtons 的DoubleBuffered 属性设置为True

【讨论】:

  • 将 DoubleBuffered 设置为 true 确实会阻止动画。不幸的是,这总是阻止动画。因此,要解决此问题,我只需在显示表单时将其设置为 true,并在单击其中一个单选按钮时再次将其设置为 false。您的建议允许我这样做,因此可以接受的答案。谢谢
  • 相当严重的矫枉过正!
  • 将 DoubleBuffered 设置为 true 不会阻止动画,它只会让它更快地发生,因此不太明显。
  • @SilverWarrior。我对此很满意,因为这只是我想知道的值得注意的部分。
  • @大卫。请详细说明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多