如何验证是否在Delphi TTaskDialog中选中了复选框?

And*_*and 5 delphi ttaskdialog tcheckbox

好吧,这应该很简单,但我找不到解决方案,至少在不太好的文档中没有找到.在a中TTaskDialog,你可以选择添加一个复选框.您可以通过tfVerificationFlagChecked标志来控制其初始状态Flags.但是如何在对话框结束后获得状态Execute

当然,可以OnVerificationClicked在每次调用时使用事件并切换一个局部变量,最初等于复选框的初始状态.但人们会期待更自然的解决方案.

And*_*and 9

我的天啊,Embarcadero犯了一个错误.

我的一些测试显示,如果最初未选中复选框,但是用户检查了该复选框,则将tfVerificationFlagChecked设置该标志.但是如果初始设置了标志,并且用户取消选中该框,则tfVerificationFlagChecked不会从该Flags集中删除该标志.这并不奇怪.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;
Run Code Online (Sandbox Code Playgroud)

请注意,如果在对话框关闭时选中该复选框,则会包含该标志,但如果用户取消选中该框,则没有代码可以删除该标志.

当然,人们会期望代码的后半部分已经阅读过

  if LVerificationChecked then
    Include(FFlags, tfVerificationFlagChecked)
  else
    Exclude(FFlags, tfVerificationFlagChecked)
Run Code Online (Sandbox Code Playgroud)

我想我会选择OnVerificationClicked手动切换方法.

  • 虽然您可以对您的解决方案进行编码,但是您还可以在Quality Central上添加一个关于此的报告(如果您还没有这样做),否则它肯定永远不会被修复... (2认同)