第七个需求 输出信息
测试代码经常要输出信息。一般网上分享的方案都是用ShowMessage之类的窗体输出信息,要点击才可以关闭弹出的窗体,如果用在循环中,可不太友好。
还可以使用OutputDebugString输出调试信息,但不能脱离IDE,还要打开Envent Log窗口,或者配合其他软件才能看到。
也可以使用WriteLn输出到cmd窗口,但会弹出cmd窗口,不美观。
输出到文件也是一种方法,但要打开文件才能查看,一般只用于备查。
下断点,在IDE窗口中查看变量信息,一般也只用于调试。
其实,既然是专门用于测试代码的程序,直接在窗体中增加一个Memo显示信息,更直观,更方便,想复制就复制,想保存就保存,想向前翻看就向前翻看。为了增加灵活性和便捷性,还可以增加几个重载函数,接受不同类型的参数。
当然,Memo和函数都添加到父窗体中就可以。
窗体继承可真方便!
使用Memo可以满足需求,但有个小问题,输出不带样式,无法突出显示重要信息。
换成RichEdit,修改一些输出函数,输出内容就美观多了。
完成!
第八个需求 运行时显示源代码
现在,测试代码太方便了,测试之外的工作都是自动完成的,很多代码都写到了测试程序中,开发其他程序时,有时要从测试程序中找代码,这又带来了一个新问题。
运行程序,找到效果满意的功能后,要再翻看源代码文件才能找到源代码。效率太低!
最好在看到运行效果时,同时看到源代码。
最简单的方法,再添加一个Memo,载入窗体对应的单元文件,在Action执行时,找到Action对应事件的代码,显示这段代码就可以完成任务。在TreeView的Click事件中增加一点代码就可以做到。但是,显示的代码是不带高亮,看着很不习惯。
网上可以搜索到的高亮显示代码的第三方组件有很多。EControl_SyntEdit比较成熟,功能也多,但是商业软件。最知名的SynEdit,也比较成熟,功能也多,而且开源,只是给编译后的程序增加了不少尺寸。测试程序只需要显示Pascal代码,不需要编辑。键盘方案、自动完成、代码折叠、代码组织、多高亮方案等功能都不需要,一些小型的组件更合适。
有一个组件从TMemo继承,重写了WMPrint函数,代码简单,可以突出显示关键字和数字常量,无法突出显示注释。使用效果还可以,修改了一些Bug,基本可以完成任务。
后来又从Lazarus中找到一个高亮组件,从TcustomControl继承,修改一点代码就可以用于Delphi,代码不多,可以突出显示不同的元素。修改了一些Bug后,非常适合测试程序使用。
这些工作只要在父窗体中完成就可以,子窗体一点都不需要修改。
运行测试程序,找到需要的功能,测试的同时就能看到源代码,又有了代码库的功能!
爽!
第九个需求 ActionList编辑器
现在测试代码的步骤简化为,打开测试工程,打开相关窗体,打开ActionList编辑器,新建一个Action,双击Action,在Execute事件中添加代码,然后编译运行程序,点击树的节点,观看代码的作用,同时还可以看到源代码。
经过之前的改造,运行时找代码容易了,设计时却显得不那么容易了。
之前没有关心Action的名称,使用的都是默认名称。打开ActionList编辑器后,显示的都是ActionXX,看着就头大。
可以在修改Action标题时,同时修改名称。但有个问题,名称不能用汉字,用英文或者拼音命名又不符合国人习惯。XE之后的版本虽然可以用中文命名,可兼容问题又来了。最好让ActionList编辑器能同时显示Action的标题,这样可以不增加工作且满足需求。
查了查Delphi的Source文件夹,没有找到ActionList编辑器的源代码,走捷径是不成了。再从以前收集的源代码中找一找,竟然找到一个,不是用于Delphi的,改改居然可以用,能同时显示名称、标题,甚至提示信息,还附带收藏功能和显示标准Action功能。
可用和好用之间可相差了很多工作量,不过虽然修改工作很痛苦,但成功后带来的效率提升却不少。
磨刀不误砍柴工!
有了源代码可以走的更远,可以在新建Action的同时,一次性填写标题、提示及名称。还可以自动设置Action的名称,让后面的序号对齐成3位,这样同一个类别下的Action自动产生的的Execute函数可以在一起。
真没想到,测试需求竟然影响到组件编辑器!