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

时间:2010-08-27 15:45:06

标签: delphi tcheckbox ttaskdialog

好的,这应该很简单,但我找不到解决方案,至少不在not so good documentation中..在TTaskDialog中,您可以选择添加一个复选框。您可以通过tfVerificationFlagChecked中的Flags标志来控制其初始状态。但是如何在对话框之后获得状态Execute d?

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

3 个答案:

答案 0 :(得分: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;

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

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

  if LVerificationChecked then
    Include(FFlags, tfVerificationFlagChecked)
  else
    Exclude(FFlags, tfVerificationFlagChecked)

我想我会采用OnVerificationClicked手动切换方法。

答案 1 :(得分:2)

关闭对话后,您是否无法阅读Flags以查看tfVerificationFlagChecked是否仍然存在?

答案 2 :(得分:0)

在Delphi XE7(也可能是早期版本)中,这似乎已经解决了。

choice := tfVerificationFlagChecked in tskbox.Flags;

choice,一个布尔变量,可以返回检查状态。