加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:18:09 所属栏目:大数据 来源:网络整理
导读:好的,这应该很简单,但我找不到解决方案,至少在 not so good documentation中没有.在TTaskDialog中,您可以选择添加一个复选框.您可以通过Flags中的tfVerificationFlagChecked标志来控制其初始状态.但是如何在执行对话后获取状态? 当然,可以使用OnVerificatio
好的,这应该很简单,但我找不到解决方案,至少在 not so good documentation中没有.在TTaskDialog中,您可以选择添加一个复选框.您可以通过Flags中的tfVerificationFlagChecked标志来控制其初始状态.但是如何在执行对话后获取状态?

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

解决方法

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

我的一些测试显示,如果最初未选中复选框,但用户已检查,则将设置tfVerificationFlagChecked标志.但是如果初始设置了标志,并且用户取消选中该框,则不会从标志集中删除tfVerificationFlagChecked.这并不奇怪. 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手动切换方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读