Delphi 在TRadioGroup中选择哪个单选按钮?

Delphi 在TRadioGroup中选择哪个单选按钮?,delphi,integer,radio-button,lazarus,radio-group,Delphi,Integer,Radio Button,Lazarus,Radio Group,正如您在我的问题历史中所看到的,我正在开发一个电子书管理器,它将是开源的,我将在大约10天内发布它,但我有一个TRadioGroup,如您所见: 我想在一个变量中存储一些东西(需要是一个整数),这个变量将与这个TRadioGroup链接 我需要执行如下if功能: TRadioButton->需要存储在变量中的数字的标题 适合2xWidth-默认值->0 适合2xHeight->1 合身宽度->2 配合高度->3 但我只使用了一次TRadioGroup和一次TRadioButton,不同于我使用

正如您在我的问题历史中所看到的,我正在开发一个电子书管理器,它将是开源的,我将在大约10天内发布它,但我有一个
TRadioGroup
,如您所见:

我想在一个变量中存储一些东西(需要是一个
整数
),这个变量将与这个
TRadioGroup
链接

我需要执行如下
if
功能:

TRadioButton->需要存储在变量中的数字的标题

适合2xWidth-默认值->0
适合2xHeight->1
合身宽度->2
配合高度->3

但我只使用了一次
TRadioGroup
和一次
TRadioButton
,不同于我使用了20多次的C。然后我想知道我需要在if函数上加什么,因为它将做什么我已经知道如何做:

var
  num: Integer;

begin
  if(TRadioButton1 checked?)
  begin
    num := 0;
  end;
end.
我需要在
if
函数的括号内放什么


附言:我将为在这个小项目中帮助过我的人在这个项目上加上学分。

一个TRadioButton具有选中属性。但是TRadioGroup具有ItemIndex属性

TRadioGroup中的项目使用TStrings存储。因此,您可以将一个对象与每个选项关联,并且可以将一个整数强制转换为要存储的ToObject

例如:

// fill the radiogroup
radiogroup.Items.AddObject('Fit 2xWidth', TObject(0));
radiogroup.Items.AddObject('Fit 2xHeight', TObject(1));
radiogroup.Items.AddObject('Fit Width', TObject(2));
radiogroup.Items.AddObject('Fit Height', TObject(3));
radiogroup.ItemIndex := 0;
要读取当前设置,请执行以下操作:

value := radiogroup.ItemIndex;
或获取关联的整数:

index := radiogroup.ItemIndex;
Assert(index>=0); // Sanity check
value := Integer(radiogroup.Items.Objects[index]);
在您的例子中,值是0到3,因此您可以使用ItemIndex


请注意,if不是一个函数。函数是一段基于输入参数返回值的代码。If是一个语句,它是一个可以执行的命令。if语句是特殊的,因为它允许您根据if条件执行不同的语句。

只是一个小提示:设置
。ItemIndex
不会将键盘焦点发送到收音机项目,我知道如何修复它,请阅读

与其通过设置
.ItemIndex
在放射组中通过代码选择无线电,不如通过将焦点发送到无线电项目来选择;我只是想说得很清楚:我的意思是只向广播节目发送焦点,而不是整个广播组

而不是:
radiogroup.itemindex:=索引

这样做:
TRadioButton(radiogroup.Controls[TheIndex])。设置焦点

它将使收音机项目被选中,将键盘焦点发送给它,因此它将在其周围显示虚线矩形,就像用户单击它一样

注1:要查看它的运行情况,请使用键盘光标键并比较仅设置
.ItemIndex
和将焦点发送到无线电项目的行为

注2:如果使用
TRadioButton(放射组控制[TheIndex]),则设置焦点
则根本不需要设置
.ItemIndex
,也可以这样做


希望在需要通过代码进行设置时,这能帮助与我有相同问题的人,例如避免循环键盘行为,例如在选择最后一个单选项并按下键盘右光标时使其停留在最后一个单选项上,第一个相同。

Ok,但是我如何使用这段代码将它们存储在一个只包含一个数字的
整数上,这将是唯一选择的数字之一?如果选择了Fit Width,ItemIndex=2,如果选择Fix 2xWidth,ItemIndex=0等等。从您的问题历史记录来看,我以为您在为GCC编写前端。为什么电子书管理器需要调用C编译器?这是我的电子书管理器的一个新特性。非常好的观察!这个漂亮的逻辑解决了一个奇怪的问题,表单被困在基于OnClick事件的循环中。谢谢