5

好的,这应该很容易,但我没有找到解决方案,至少在不太好的文档中没有找到.. 在 aTTaskDialog中,您可以选择添加一个复选框。您可以通过 中的tfVerificationFlagChecked标志来控制其初始状态Flags。但是如何获取对话框后的状态Execute呢?

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

4

3 回答 3

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手动切换方法。

于 2010-08-27T16:15:40.773 回答
2

对话框关闭后您不能阅读Flags以查看是否tfVerificationFlagChecked仍然存在吗?

于 2010-08-27T16:00:32.673 回答
2

在 Delphi XE7(也可能是更早的版本)中,这似乎已得到解决。

choice := tfVerificationFlagChecked in tskbox.Flags;

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

于 2015-01-28T14:04:08.470 回答