使用Delphi 7制作向导界面

10
我正在使用 Delphi 7,并尝试创建向导界面。我不知道是否有更简单的方法来创建向导,所以我考虑为向导的每个步骤制作单独的窗体。当用户点击“下一步”时,当前活动的窗体将关闭,并打开下一个窗体。
这里是两个连续窗体的屏幕截图:screen-shot 我已经编写了一个过程,它接受两个窗体作为参数:将被关闭的窗体和向导的下一个窗体。
class Procedure Tspad.nextForm(showForm, closeForm: TForm);
begin
   closeForm.Close;
   showForm.Showmodal;
end;

当我点击“下一个”按钮时,会执行以下代码:

Tspad.nextForm(echipContractForm, clientContractForm);
当我运行程序并按下“下一个”按钮时,下一个表单会出现,但当前的表单不会关闭。如何让它工作,或者是否有另一种更有效的创建向导的方式?
当我执行程序并点击“下一个”按钮时,下一个表单出现了,但是当前的表单没有关闭。有什么方法能让这个功能正常工作呢?或者说是否有其他更高效的创建向导的方法可供选择?

4
使用 TPageControl:http://delphi.about.com/od/delphitips2007/qt/hidepagectrltab.htm要隐藏 Delphi TPageControl 组件中的选项卡,请按以下步骤操作:
  1. 将 TPageControl 的 Style 属性设置为 [tsTabs]。
  2. 选择要隐藏的选项卡的 TabVisible 属性,并将其设置为 False。
要显示选项卡,请将 TabVisible 属性设置为 True。
- SimaWB
3
Project Jedi(JVCL)有一个名为TJvWizard的向导组件。 - LU RD
6个回答

20

制作向导的一种常见方法是使用页面控件。向导的每个不同页面都是页面控件中的不同页面/标签页。我认为,这就是Windows实现向导的有效方式。

自然而然地,您想要隐藏所有选项卡。通过将每个标签页的TabVisible设置为False来实现此目的。当您希望在向导中前进和后退,例如当用户单击下一个或上一个按钮时,可以通过设置ActivePageActivePageIndex来实现,具体取决于您的喜好。


这是我过去的做法。为您的向导单独创建一个表单,包括页面控件和一些按钮。 - Marcus Adams
我同意这个观点,但我也支持LaKraven的想法,即每页制作一个表单,并在运行时将页面停靠。否则,向导往往会变成一个巨大的代码混乱。 - Warren P
@Warren LaKraven实际上建议使用框架而不是表单,我推测在设计时将它们停靠。但无论哪种方式都可以,并且是一种非常好的技术来避免混乱,我同意。 - David Heffernan
为了获得更好的结果,您可以将DoubleBuffered设置为true。 - Ben

14

将单个表单上显示的内容进行分组的一个好方法是使用框架(Frames)

框架(Frame)很像一个表单,但它没有自己的窗口,而是嵌入到一个主表单(host Form)中。

当与(正如David Heffernan所建议的)TPageControl或甚至 TNotebook 结合使用时 (它与 TPageControl 几乎完全相同,只是一开始没有选项卡),您将获得一个易于维护的向导页面。


2
+1 但是 TNotebook 有点奇怪。在我看来,它似乎是遗留下来的,并且可能有点难以使用。 - David Heffernan
我提到这个是因为我不记得 Delphi 7 中是否实际存在 TPageControl(我现在经常使用它,但是不能回忆起在 Delphi 7 中是否曾看到过它)。 - LaKraven
2
是的,它在D7中存在,并且在那之前很久就已经存在了。 - David Heffernan
好知道 :) TNotebook在Win 3.1选项卡中,所以我建议它是遗留的 ;) - LaKraven
1
很好 :) 我强烈建议将David的答案标记为正确答案,因为我的更多是对他的扩展 ;) - LaKraven

11

同意。这样能节省很多时间,避免重复造轮子。 - Robert Oschler

4

2
您可以通过测试一些组件来帮助您完成此任务(使用tPageControl或TNotebook进行内部测试)。请参阅此链接
谢谢。

0

您也可以考虑使用 TMS TAdvSmoothStepControl(非免费!)。

另一种解决方案,但只是在程序“外部”,是使用Inno Setup制作向导,即使是用于“非安装设置”目的。

实际上,使用 Inno Setup 您可以做很多事情(修改 .ini 文件和注册表、启动/停止程序...),这对于一个不需要“安装”的程序向导非常有用。


1
你回答中的最后一句话假设OP试图制作安装向导,但截图表明情况并非如此。我建议删除你回答中的那部分内容,并保留对TAdvSmoothStepControl(这是一个不错的组件)的推荐。 - LaKraven
@LaKraven 虽然 Inno Setup 的主要用途是创建安装程序,但您也可以使用它(通过一些技巧)作为向导来执行简单操作,例如关闭程序、根据用户选择更改 .ini 文件,并再次运行程序。也许这对所有人来说都不是很清楚,我会编辑我的答案。 - philnext

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接