好的,这应该很简单,但我找不到解决方案,至少不在not so good documentation中..在TTaskDialog
中,您可以选择添加一个复选框。您可以通过tfVerificationFlagChecked
中的Flags
标志来控制其初始状态。但是如何在对话框之后获得状态Execute
d?
当然,可以使用OnVerificationClicked
事件并在每次调用时切换一个局部变量,最初等于复选框的初始状态。但人们会期待更自然的解决方案。
答案 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,一个布尔变量,可以返回检查状态。