易向导开发手册

 

相信大家用过很多向导类型的程序,就是提醒用户一步步地进行某些操作,最后得到用户需要的结果。例如程序的安装向导、申请会员向导等等。

易语言的向导功能,是引导用户创建一段自己需要的程序代码,即可以动态生成程序代码的功能。

 

易向导支持库

 

易语言的向导制作需要使用易向导支持库提供的命令,该支持库中的命令都是针对易语言的源程序(即“*.e”程序)进行操作,这些命令可以动态的对源文件中的代码和组件等进行编辑,例如删除、复制、修改等操作,从而生成自己需要的代码。

通过查看支持库面板中易向导的命令与数据类型可以看出,易向导功能强大,几乎可以对易程序进行各种操作,如对程序集、子程序、全局变量、程序集变量、局部变量、子程序参数、数据类型、DLL命令、窗口、窗口组件、常量或资源等进行任意的操作。

既然向导程序是要对源代码文件进行操作,那就需要有一个源代码模板文件(即“*.e”程序),对模板文件进行修改最后生成目的代码。

源代码模板文件实际就是将所有可能用到的代码和组件都编写到一个源文件中,然后针对向导程序中用户的选择,对模板文件进行修改,最后生成用户需要的源代码。

例如:创建一个可以动态生成常用菜单、和关于窗口的向导程序,首先,需要一个源代码模板文件。源代码中可以将所有可能生成的菜单和代码都编写进去。窗口及菜单如图1所示。

1 源模板文件窗口界面

 

源程序中,添加了2个主菜单,和4个子菜单,还加入了1个关于窗口,程序的代码如下:

代码中,当“关于”菜单被选择,则载入“关于窗口”和“Windows系统提供的关于窗口”,API:“ShellAbout”是用来载入系统关于窗口的,之所以要在代码中编写载入2个关于窗口的代码,是由于在后面的向导程序中会提供给用户选择这2种关于窗口,根据用户的选择,最后生成用户需要的关于窗口,所以这里将可能用到的代码和API都编写进来。

注意:本节中将源程序模板保存在C盘根目录下,名为“向导模板文件.e”,后面向导程序会使用到。

下面,大家来设计一下向导程序的界面,如图2所示。

2 菜单向导界面

程序使用的是选择夹组件,将其“隐藏自身”属性设置为真,运行后用按钮来控制选择夹各子夹之间的切换。

首先选择夹的第一个子夹提供了菜单的选择,上面的源代码中提供的菜单都在2个选择列表框中提供选择,用户可以在向导中,选择需要建立的菜单。

第二个子夹如图3所示。

3 选择关于窗口向导界面

第二个子夹提供了用户对关于窗口的选择,用户可以选择“无关于窗口”、“系统关于窗口”和“自定义关于窗口”。

下面大家来看一下向导程序的代码部分,程序中创建了4个程序集变量。

这些变量记录了用户在创建程序时是如何选择的,最后创建最终程序时根据变量的值来更改源代码模板,生成用户需要的源程序。

下面来看一下“_选择列表框1_列表项被选择”子程序中的代码:

 

当选择列表框1的列表项目被选择后,就根据当前列表项目的选择情况动态地添加选择列表框2中项目。因为预选的主菜单有2个,每个菜单的子项不同,所以需要动态的改变用来选择子菜单的“选择列表框2”中项目。

 

程序中,当改变选择列表框中项目的选择情况后,就改变程序集变量的值,来记录用户的选择情况,“_选择列表框1_选中状态被改变”子程序代码如下:

当选择列表框1中的项目选择状态被改变后,就改变“菜单数组”变量的值。

_选择列表框2_选中状态被改变”子程序代码如下:

 

当选择列表框2中的项目选择状态被改变后,就改变“文件菜单数组”和“帮助菜单数组”变量的值。这两个逻辑变量数组保存了用户需要创建的文件菜单和帮助菜单情况。

以上完成了修改数据的采集过程,接下来,是非常重要的创建过程了,当“完成”按钮被单击后,则创建程序,“_完成按钮_被单击”的子程序代码如下:

上述程序实现了:创建按钮点击后,则根据各程序集变量的值来对模板程序进行修改,最后使用“写出程序()”命令创建程序。

程序中,使用了“删除程序()”和“删除程序段()”命令。

“删除程序()”命令的第一个参数为“程序项类型”枚举常量中成员的值,大家可以参考易语言帮助来了解该枚举常量中的成员的值及代表的意义。“删除程序()”命令的第二个参数为删除项的名称,例如上面程序中的:

    删除程序 (#程序项类型.窗口组件, _启动窗口.文件”)

该行代码是用来删除启动窗口中的文件菜单。

    删除程序 (#程序项类型.子程序, _关于_被选择”)

该行代码是用来删除“_关于_被选择”子程序。

“删除程序段()”命令删除指定子程序中的一段程序代码,必须确保待删除的代码块完整,不交叉跨越分枝及循环语句,否则将导致系统出错。

该命令的第一个参数为要删除子程序的名称,第二个参数为要删除程序的标记名。

例如,源程序中的如下代码:

大家注意源程序中的“备注”,备注中使用“$”加一对圆括号,来定义代码的备注,这个备注定义的格式就是“删除程序段()”命令要使用的“标记名”的定义方法,圆括号中就是命令需要填写的标记名,例如向导程序中的代码:

    删除程序段 (_关于_被选择”, “载入关于窗口”)

该行代码用来删除源程序中“_关于_被选择”子程序的第一行代码。注意命令的第二个参数,直接填写“载入关于窗口”而没有带圆括号:“( )”。

程序的最后,使用“写出程序()”命令,将修改后的命令写出,该命令的第一个参数为“模板程序数据”;第二个参数为“是否关闭源程序”,如果第二个参数为“假”,则在当前程序中插入创建后的源代码,如果第二个参数为“真”则关闭当前易语言中打开的程序并载入新创建的程序。

该命令的返回创建程序过程中的错误文本,即创建程序中的错误会以文本形式返回,程序写到这里,大家可以试运行程序。(注意:例程中,点击“下一步”和“上一步”按钮后切换子夹的代码附录中没有编入,由于比较简单,所以大家可以自己参照例程)

“写出程序()”命令之前的所有代码都没有生成新程序,只是为修改模板易程序做准备工作,而一旦运行到这条命令,才会根据之前的选择情况生成新的易程序。

程序运行后,点击“完成”按钮后的效果如图4所示。

4 未编译的程序运行效果

可以看到,在未编译的情况下运行程序,弹出信息框提示失败,信息框中显示的文本就是“写出程序()”命令返回的错误文本,如果有多项错误,则会返回数组,信息框会多行显示。

在没编译的情况下之所以会出现这样的错误,是因为向导程序在创建程序时会与易语言程序进行通讯,即易语言提供写出源代码的接口。所以编译后的向导程序也必须在易语言中打开。

下面就来介绍如何在易语言中使用向导程序。

 

 

使用易向导程序

使用易向导新建程序

 

在“新建”对话框中使用向导。易向导的管理器类似易模块的管理。

 

6 成功导入向导程序

 

大家在新建对话框中选择向导程序然后打开,刚才编写的向导程序就会被运行。

易向导所使用的模板程序建议作为字节集放在向导程序的资源表中,修改完成后会立即在易语言中打开,否则会因为找不到模板文件路径而运行失败。例如:

结果文本 写出程序 (#模板资源 ,  )

 

使用易向导插入程序

 

向导程序不但可以新建一个程序,并且可以在当前已经打开的易程序中插入程序代码或窗口。例如:插入一个关于窗口,或插入写好的注册窗口程序等。

如果是插入程序代码,则需要在易向导的源代码中将“写出程序()”命令的第二个参数设置为“假”。所以在编写易向导前就要考虑清楚自己的易向导是用来新建程序的还是插入程序的。

要插入代码要使用菜单“工具”→“执行易向导”,打开一个向导程序,如图7所示

 

 

7 在当前程序中插入代码

“打开”后,向导程序就会被运行,并且生成的代码会在当前易程序中插入。

注意:当执行写出程序时,会将所生成程序与现行易语言编辑环境中的源程序合并,合并前“_启动窗口”及其窗口程序集、“启动子程序”代码将被抛弃。所以在用来插入代码的模板文件中,可以给有用的“_启动窗口”改一个名字。

 

附录例程参见“易语言向导例程.e”,模板文件参见“向导模板文件.e”。