用户体验改善计划 – 使用 TaskDialog 代替 MessageBox
周融 © 2007 All Rights Reserved.
2007 年 2 月
TaskDialog 是 Microsoft® Windows® Vista™ 操作系统中新增的一个用户界面元素,它类似于消息框,可以提示用户进行选择操作,但它比消息框功能更加强大。本文介绍在 Windows Vista 上和非 Windows Vista 操作系统上实现的一个 TaskDialog 实例,以便开发人员了解更多有关 TaskDialog 的信息。
在本文中:
1、为什么需要 TaskDialog
2、TaskDialog 作为消息框
3、TaskDialog 作为进度对话框
4、TaskDialog 作为选项选择提示对话框
5、在 HDFrame 产品中使用 TaskDialog
6、结论
为什么需要 TaskDialog
长期以来,Windows 提示消息给用户的方式,或者说用户获取系统消息的途径,大部分是通过消息框。而 Windows 提供的消息框所展示的文本和可供选择的操作是有限的,如,选择的操作仅有:确定、取消、是、否、重试、终止、忽略六种。如果在批量文件复制擦作中目的文件架存在同名文件时希望给出“是”、“全部都是”的提示,使用标准消息框就无能为力了。
Windows Vista 考虑到了这种情况。TaskDialog 就是用来代替 MessageBox 的一种全新 UI,TaskDialog 不仅可以自定义可供选择的操作,还可以拥有更多显示信息的途径,如折叠窗体、脚注等,除此之外,TaskDialog 还能显示命令链接、超级链接、单选框、进度条凳控件,使得用户能从一个位置获取到更多的信息。
TaskDialog 在 Windows Vista 中启用了 Unicode 的应用程序中有效,这些程序需要拥有清单文件,关于如何启用 Unicode 的详细信息,请参见《用户体验改善计划 – 使应用程序具备 Windows XP 视觉样式》。
TaskDialog 作为消息框
这是 TaskDialog 最原始的模型,图 1 展示了一个简单的 TaskDialog,图 2 展示了有介绍性文本和说明的简单 TaskDialog,而图 2 展示了拥有多个操作按钮的简单 TaskDialog。
注意图 3 中有一个“显示/隐藏消息信息”部分,这个部分展开后可以显示更多的信息,如图 4 所示。
图 5 展示拥有脚注和多个自定义命令按钮的 TaskDialog,图 6 则以命令链接(CommandLinks)和超级链接(Hyperlink)提示用户更多信息。
TaskDialog 作为进度对话框
TaskDialog 可以作为文件操作、数据库操作等具备等待时间的操作提示载体。图 7 展示了一个等待进度对话框,TaskDialog 显示一个进度条和一些文本信息,进度条的状态可以是普通、暂停、错误或者平滑滚动。
TaskDialog 作为单选选择对话框
TaskDialog 的另一个功能就是可以作为具备单选按钮组的选择对话框,用户可以从形如图 8 的对话框中选择一个选项并单击一个按钮。这种操作适合于具有多个分支选项和多个可执行操作的场合(如文件覆盖提示,更新提示等)。
在 Delphi 产品中使用 TaskDialog
TaskDialog 的一个 Delphi 平台的实现已经被成功引入到 Delphi VCL 框架,这为改善用户体验提供了基础。这个 TTaskDialog 对象可以显示(Windows Vista 系统)和模拟显示(非 Windows Vista 系统)TaskDialog。
var dlg: TTaskDialog;
begin
dlg.Title := ‘Hello, TaskDialog!’;
dlg.Instruction := ‘Would you like TaskDialog?’;
dlg.CustomButtons.Add(‘Yes, I like it’);
dlg.CustomButton.Add(‘No, I didn’t like it at all’);
dlg.Icon := tiShield;
dlg.Execute;
end;
如果希望使用设计器作为控件直接在应用程序窗体设计时进行设计,则需要重新安装 HDPOS.bpl 包,安装方法为:
1、打开 Component -> Install Packages… 对话框。
2、找到 HD40 Components 和 HD40 Library,并将它们 Remove。
3、找到 Project Manager 中的 HDPOS.bpl,HDPOS2.bpl,激活它们,并单击“Install”进行重新安装。
4、成功后,在“TMS”标签页上,可以找到 TaskDialog。
结论
TaskDialog 为用户获取信息提供有效捷径,开发人员应该在可以使用 TaskDialog 的地方尽量使用它,从而代替传统的 MessageBox 方式,就像有人所述:“TaskDialog 正是为替代 MessageBox 而设计”。