好的,这应该很容易,但我没有找到解决方案,至少在不太好的文档中没有找到.. 在 aTTaskDialog
中,您可以选择添加一个复选框。您可以通过 中的tfVerificationFlagChecked
标志来控制其初始状态Flags
。但是如何获取对话框后的状态Execute
呢?
当然,可以使用该OnVerificationClicked
事件并在每次调用时切换一个局部变量,最初等于复选框的初始状态。但人们会期待一种更自然的解决方案。
好的,这应该很容易,但我没有找到解决方案,至少在不太好的文档中没有找到.. 在 aTTaskDialog
中,您可以选择添加一个复选框。您可以通过 中的tfVerificationFlagChecked
标志来控制其初始状态Flags
。但是如何获取对话框后的状态Execute
呢?
当然,可以使用该OnVerificationClicked
事件并在每次调用时切换一个局部变量,最初等于复选框的初始状态。但人们会期待一种更自然的解决方案。
我的上帝,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
手动切换方法。
对话框关闭后您不能阅读Flags
以查看是否tfVerificationFlagChecked
仍然存在吗?
在 Delphi XE7(也可能是更早的版本)中,这似乎已得到解决。
choice := tfVerificationFlagChecked in tskbox.Flags;
选择,一个布尔变量,可以返回检查状态。