如何开发一个开发工具?

曾经完成过一个较为复杂的开发工具的项目,把一些体会写出来,供大家共享。这个开发工具主要用于银行前端,也就是我们在银行的柜台上看到柜员操作的系统。

开发工具的主要功能就是让系统开发人员能够按照银行交易的要求,在前端设计和开发银行交易、菜单定义、屏幕输入/输出界面,数据上下传格式(封包格式,这是同后台主机系统通讯必需的),设备输入/输出定义(包括磁条读写器、密码键盘、针式打印机、存折打印机等)、快捷键定义、系统参数设置等,此开发工具运行的效果图如下:


可以看出来,象 Visual Basic 这样的开发工具,如果不包括运行调试部分,大概包括以下部分:

1. 工程资源管理器
按照项目,分类别对一个项目内的所有资源(包括窗体、模块、类模块等)进行增/删/改,如果与 SourceSafe 集成,还可以Check IN/Check out 资源
  
2.窗体设计器与菜单编辑器 
用来设计窗口及其属性,其所包含的控件和控件的属性,以及窗体上的菜单及其事件 
打开 .frm 的窗体源文件就可以看到,VB的窗口被保存成具有层次的格式文件,有点象XML 文件

3.代码编辑器 
一个具有智能提示和语法着色的代码编写器

4.菜单及各种工具栏 
用来符助用户完成系统设置,资源管理、窗体的编辑、代码的编写/调试工作

5.其它 
如帮助,对象浏览器,外接程序等…


按照以上的需求分类,分部分列出我们的实现方法:

1.工程资源管理器 
   
这个好办,只要定义好你的开发工具要使用的资源种类,然后用一个 TreeView 就可以解决问题了 笑脸
关于版本管理,可以有两种实现办法: 
1) 如果你将资源保存在 Database(如 Sql Server) 或文件系统中,可以通过保存资源的多个版本和版本号(可能参照SourceSafe的实现),用户修改之前必须 Check in/Check Out,这种做法要求你自己实现”用户管理”(用户增删改/权限设置/登录/退出系统等)这个部分. 

2) 另外一种办法是利用 Visual SourceSafe , SourceSafe 提供了一套丰富的接口可以调用,你可以将你的所有资源保存在 Sourcesafe 中,让 SourceSafe 来替你进行版本管理,注意,这里是把 SourceSafe 直接集成在你的程序中,而不是单独打开 SourceSafe ,Check out 文件后再由你的工具进行修改。使用 SourceSafe ,你将省去用户管理这部分工作,SourceSafe 自己带这部分功能。 

建议,如果你的开发工具要实现多人协同开发的目的,则最好使用 DataBase (和你的开发工具是C/S架构) ,或者 SourceSafe (大家都用一个 SourceSafe Database),这样有利于资源的版本一致性和管理的简便性。

2.窗体设计器和菜单编辑器 

菜单编辑器比较简单,其实就是生成一个树而已,参照 VB 做一个对话框就可以了 笑脸
  
窗体设计器是个比较难的东西,不但要让用户所见即所得的设计窗口及各种控件(工具箱:Label、Text、Option、CheckBox、Select、Tabel、Frame、Line、Image、Shape等),这要设计窗体及控件的属性(类似于 VB 一样,要有一个属性编辑器) 

我相信如果有人让你做这样的一个东东,90% 都想到了用 C/C++ 去实现,本人 C/C++ 不熟,只好剑走偏锋,拿出最拿手的 DHTML 来实现它,以下是具体步骤: 

1) 利用 DHTML Edit Control 

这个相当于一个窗体的 Container ,然后你可以用程序往里面塞各种各样的 HTML Code,显示出来的就是象 VB 的窗体编辑器那样的一个一个的 Control 。 
注意,DHTML Edit Control必须设为浏览状态,这样才能捕获 Mouse 拖动/放大缩小等事件(DisplayChanged事件),才能自定义右键的快捷菜单,正因为此,所以不能使用 准的 IE 控件,使用它之后,就无法捕获事件. 
   
2) 控件的实现 

大家可以看到,VB 中的常用的控件,HTML 里都有:

 控件中采用的一些关键技术: 
 a) 合理设置 ContentEditable 属性 
 b) Behavior 技术 
 c) HTML Control等 

 注:以上的一些 DHTML 特性只有在 IE 5.5 以上版本才支持,所以一定要将 IE 升级到 5.5 以上版本。 

3)窗体的保存 

即然是 HTML ,就可以直接保存 HTML SourceCode 就可以,但我们的窗体解释器并不是一个浏览器,所以我们要转成格式化的,可以识别的格式,使用 IE 的 DOM 模型,取出放在上面的所有控件,保存成 XML 文件. 

如果用户要修改已保存的窗体,则是上面一个过程的逆向,利用 XSL 把 XML 转成 HTML ,或者用程序解释 XML ,Render 成 HTML 

4)属性的设置 

每个控件有不同的属性,这个属性有些是和 HTML 相同的,有些是不同的,如果我要定义一个 Button ,要求它带有一个特殊的属性 Tag ,则在生成此控件时,要这样做: 
doc.body.insertAdjacentHTML “BeforeEnd”, “<button>确定</button>”    
Tag 属性并不是 HTML Button 的标准属性,但你这样设置并不是错误的,利用 DOM 也能随便取出或设置 Tag 属性的值。 

此控件的所有属性取出来,列在一个可编辑 Grid 里,放在屏幕的右边,就实现了属性编辑器的功能,要注意两边的同步,如改变了控件的Width、Height 等属性后,在窗体编辑器中要反映出来,同样道理,当用 Mouse 把控件拖动,移动时也要更新属性列表中相关的值。要同步的值还有字体、颜色,风格(3D or flat)等。 
  
3 代码编辑器

本为是想自己写一个可以语法着色的代码编辑器,后来找到一个非常好用的控件:CodeMax ,这个控件可以根据语言设置的不同,自动将内容语法着色,绝佳的一个控件。

由于项目进度紧,我们没有实现一种自定义的编程语言,而是利用了标准的 C 语言作为我们的代码,用 CodeMax 这个控件,我们没有写一行代码,就实现了绝好的代码编辑器。

可以调用 VC6 的 CL.exe 来帮你完成代码的语法检查、编译工作,将 CL.EXE 的输出重定向到一个文件中,然后可以检查此文件来获得到语法检查、编译的信息,并可以利用行号来在开发工具中定位到程序中具体行,便于开发人员 Debug。

4.菜单及工具栏

这些东西比较好做,我们用的是 ActiveBar ,最好的工具栏控件,连资源管理器和属性编辑器的 Dock 功能都是它来实现的,功能很强大,开发 Windows 应用程序首选的工具栏控件。

5.帮助,对象浏览器,外接程序等…

帮助比较好做,HTML Help Workshop ,我们没有对象浏览器,也没有外接程序 笑脸

=============================================================================

以上只是对实现一个开发工具的开发端(不包括运行端)的技术要点做了一些说明,详细的实现过程就比较多了,那是系统详细设计的内容,不便公布 吐舌笑脸

另外,如何实现一种自定义的开发语言,是一个很有意思的话题,如果有时间,再和大家探讨,交流心得。

附:一些有用的资源

1. MSDN Library
DHTML Reference ,实现 DHTML Form Designer 的必备,在
http://msdn.microsoft.com 中有一个贺卡设计器 Card Designer ,就是用 DHTML 来实现的,和 Form Designer 的设计思想是一致的,值得参考

2. DHTML Edit Control 及其例程

3. ActiveBar 例程

“如何开发一个开发工具?”的36个回复

  1. 佩服!
    很少看到有公司会投入这些资源做这样的东东。
    请问做这个工具你们投入多少人耗时多久?

  2. 回 kaneboy

    其实做这样一个东西,资源投入并不是很大,源代码约有 5 万行,主要有三个人,我带着两个刚毕业的两个学生,花了四个月(如果没有上层人员的干扰,估计能缩短一个月),后来在此工具的使用人员的不断反馈下,功能稳定和升级用了两个月。

  3. 现在的确非常流行拿DHML+JS做界面,我已经看到好多地方了。
    比如VS.NET的那个启始页,呵呵。
    我前段时间做那个JoyQQ的时候也使用了这些东西。特别适合后期维护。

  4. VB吧,因为ActiveBar是ActiveX Control,而moslem又说C++不熟:) 用DHTML的想法绝妙……最终运行呢?

  5. 我们当时开始做这个东西的时候, VS.NET 2002 还是 Beta 呢,所以还是用 Visual Basic 6 做的,其中有几个组件是 VC++ 6 写的。

    最终运行的环境是 Linux ,我们开发完成好的屏幕、菜单都是 XML ,在 Linux 上解析执行就行了,程序是 C ,在 Linux 上 Build 一下就可以了。

    Linux 上的运行环境也比较复杂,是当时我们项目组的另外一个小组做的。

  6. Pingback: 匿名
  7. 如果能共享一部分有关dhtmlEdit控件操作的代码就更好了。测试了一下,实现思路挺好的。

  8. 报个到,这个我比较熟,做过一个模拟软件设计工具,用来生成模拟其他软件的程序,所见即所得的窗口设计器,加上VBScript代码编辑器。用于计算机操作考试,在考试行业还算比较成功的,因为选择题考试考察能力太不准确了,所以许多考试现在都希望做Simulation,微软现在在中国的MCP考试就在开始用这东西。
    最近想换个工作了,也不知道这方面的经验有没有用。

  9. 楼猪真是厉害,连这种方法都想得出来,而且还要在 DHTML,XML和vb之间转换。绝对佩服。
    不过不知道这个冬冬,生成的代码质量如何,莫说四个月搞完的,我觉得再有一年你还是这个样子。
    为什么?想知道吗?

    编辑器的底层是不透明的,不能够扩展。为什么不看看Eclipse VE。
    其实编辑器并不复杂,只不过要自己画一些内容,不如用最基本的窗体容器,然后做一些开发控件(不是运行时控件)。

    对于这个项目固然是没问题,不过把这种思路作为解决问题的一个办法,特别是给初学者造成的认识误区,问题就严重了。

  10. 2003年的项目?按照我98年完成的类似软件的经验来看,
    没有什么毛病.选择合理的工具后写一个非常简单的这样的
    程序,不过数天即可.不同之处是,你的项目使用了WEB BROWSER.包括中兴通讯,都有类似界面的软件,
    不过用得如何,见人见智了.

    深圳一程序员

  11. 你好:
    看了你的文章觉得挺好的,有些思想是可以借鉴的,我想看看你客户端的源码,不需要全部,如果你看到我的回复,考虑一下,我只是想学习一下,希望得到你的支持!!!!再此谢谢!!!!
    mail:[email protected]

  12. 你好:
    看了你的文章觉得挺好的,有些思想是可以借鉴的,我想看看你客户端的源码,不需要全部,如果你看到我的回复,考虑一下,我只是想学习一下,希望得到你的支持!!!!再此谢谢!!!!
    [email protected]

  13. 这个思想在现在看来确实是这样的,主流的桌面会变成XML + 通用模块的样子。

  14. 有创意!但是否考虑过自己开发一个操作系统,然后用自己发明的语言,呵呵哪怕是非常简陋的,那你也很牛了 ,呵呵!

  15. 用 DHTML Edit Control 控件做的,个人看法
    就技术而言,很低……..,只要设置控件为desiger 模式就能设计,设置成preview模式就能预览界面.
    现在缺的是能独立实现DHTML Edit Control的人才…

  16. 若能屏蔽掉 CodeMax 的右键菜单那就绝妙,
    我花了很大的力气还是无法屏蔽掉。
    ============================
    可以的,但还是建议自己开发个像它那样的彩色文本框.

评论已关闭。