好的,这应该很简单,但我没有找到解决方案,至少在不太好的文档中没有。在 TTaskDialog
中,您可以选择添加一个复选框。您可以通过 Flags
中的 tfVerificationFlagChecked
标志来控制其初始状态。但是,如何在对话框 Execute
后获取其状态呢?
当然,你可以使用 OnVerificationClicked
事件并在每个调用时切换一个本地变量(最初等于复选框的初始状态)。但是人们会期望有一个更自然的解决方案。
好的,这应该很简单,但我没有找到解决方案,至少在不太好的文档中没有。在 TTaskDialog
中,您可以选择添加一个复选框。您可以通过 Flags
中的 tfVerificationFlagChecked
标志来控制其初始状态。但是,如何在对话框 Execute
后获取其状态呢?
当然,你可以使用 OnVerificationClicked
事件并在每个调用时切换一个本地变量(最初等于复选框的初始状态)。但是人们会期望有一个更自然的解决方案。
哦,我的天啊,Embarcadero 犯了一个错误。
我的几个测试表明,如果复选框最初未被选中,但是用户选择了它,则会设置 tfVerificationFlagChecked
标志。但是,如果标志最初已经被设置,并且用户取消选中该框,则 Flags
集合中的 tfVerificationFlagChecked
不会被移除。这并不奇怪。VCL 代码如此。
Result := TaskDialogIndirect(LTaskDialog, {$IFNDEF CLR}@{$ENDIF}LModalResult,
{$IFNDEF CLR}@{$ENDIF}LRadioButton, {$IFNDEF CLR}@{$ENDIF}LVerificationChecked) = S_OK;
FModalResult := LModalResult;
if Result then
begin
FButton := TTaskDialogButtonItem(FButtons.FindButton(FModalResult));
FRadioButton := TTaskDialogRadioButtonItem(FRadioButtons.FindButton(LRadioButton));
if LVerificationChecked then
Include(FFlags, tfVerificationFlagChecked);
end;
if LVerificationChecked then
Include(FFlags, tfVerificationFlagChecked)
else
Exclude(FFlags, tfVerificationFlagChecked)
OnVerificationClicked
方法。choice := tfVerificationFlagChecked in tskbox.Flags;
choice是一个布尔变量,可以返回选中状态。
在对话框关闭后,您无法读取Flags
以查看tfVerificationFlagChecked
是否仍然存在吗?
Flags
,tfVerificationFlagChecked
现在是一个可靠的指示,即使用户多次更改值也是如此。if dlg.Execute then
begin
wasChecked:=tfVerificationFlagChecked in dlg.Flags;
// do something
end;