最早的
Tangram
预览
几天前与好友在
msn
上聊天,朋友给我一个惊喜,他提供给我
2001
年我发布的
Tangram
相关的信息,这些已经迷失的东西,看起来十分亲切,原始地址是
http://www.vchelp.net:9090/dtool/submit/vdd_pa.htm
,但我翻遍了所有的备份,已经找不到相关的代码了,将其整理在这里,是为了纪念最初的时光,回忆当年,真是激情燃烧的岁月……
VBA
应用程序框架编辑器
(VisualDeveloper)
是一个集成
Microsoft Visual Basic for Application 6.0
的应用程序开发系统,其核心技术是
Microsoft Visual Basic for Application SDK 6.1
,全部程序由
MFC 6.0&ATL 3.0
编写。本系统支持
Internet
系统开发、支持面向企业的应用系统开发。
本系统的特点是支持流行的用户界面,如图:
本图显示由
VisualDeveloper
产生的一个程序文档,由一个
TreeView
、一个
VBAForm
、一个
Grid
组件以及一个类
MSExcel WorkBook
的
GridBook
(内置电子表格机制)组成,
VBAForm
即
MS Form2
,文档布局由
MFC
的
CSplitterWnd
实现,由于内置
VBA
框架,各个分窗元素可以在
VBA
框架内自然的交互作用,下图显示处于工作状态的
VBA IDE
:
VisualDeveloper
目前支持由以下六种对象进行任意分窗组合产生功能强大的用户程序文件:
1
、
ActiveDocument(
包含
VB Document)
;
2
、
HtmlView
;
3
、
VBAForm(MS Form2)
;
4
、
GridView(
由美国
Stingray
开发的
Object Grid Pro
组件
)
;
5
、
TreeView
;
6
、
ListView
。
在
VisualDeveloper
中支持
VBDocument
是考虑到
VBDocument
的易开发性以及
VBDocument
支持
COM
,我们实现了
VBDocument
与其他元素的交互操作;在
VisualDeveloper
中支持
HtmlView
是使得
VisualDeveloper
具备
Internet
功能的重要因素,特别我们实现了在
Html
页面中直接作用其他分窗对象以及调用
VBA Macro
,如图显示一个
VisualDeveloper
文档:
其中弹出的
Form
是网页中的按纽实现的。
VisualDeveloper
中的
VBAForm
是
“
宿主
(Host)”Ms Form2
的一种可编程
Form
,下图显示一个处于设计环境的文档。
VisualDeveloper
是一个可灵活二次开发的软件环境,由于集成了
VBA6.0
,因此在
COM
框架内,各类程序员均有用武之地,特别我们提供
VBA
的多线程支持,这样,基于工控的软件或对多任务、多线程要求苛刻的应用也可融在
VisualDeveloper
内。
VisualDeveloper
的开发借鉴了许多成熟软件的软件形式,我们的目标是实现一种具备
Html
特征,又具有传统程序特点的
“
文档
”
。我们准备近期在网上推出测试版本,希望业界朋友给予支持。如果各位朋友有针对
VisualDeveloper
的建议、要求,请与我联系,本人不胜感激!!!
附作者来信:
闻先生:
关于
VisualDeveloper
开发工具,目前还未形成详细的程序文档,因此暂时不能提供全面的介绍,请多原谅。以下我仅就其基本的思想简述一下,不当之处请多包涵。
VisualDeveloper
是一个类似
MS Access
的软件开发工具,与
Access
一样,
VisualDeveloper
也是建立在
Miscrosoft Visual Basic for Application
基础之上,
Access
是基于
Form
的数据库应用系统,
VisualDeveloper
则是基于文档的,即
VisualDeveloper
开发的结果产生的是一种
ActiveDocument(
或
ActiveDocument
集合
)
,
VisualDeveloper
产生的文档具有多个视(
MFC View
),事实上,我所做的工作之一基本上是将
MFC
的
“
文档
-
视
”
构造
“VB”
化,即:通过宿主
Microsoft VBA,
将所谓的
Document-View
体系引入
VBA
之中。由于
MFC
缺乏
COM
的触发
“
事件
”
机制,故每当在
MFC
体系下产生文档时,只能在
CFrameWnd(
派生
)
类的
OnCreate(OnCreateClient)
中创建、处理与文档相关的视(
View
)类,这导致文档的
“
多视化
”
在
Mfc
中不能被定制化,即设计者必须事先设计好文档对应的视类、必须存在相应的文档模板来协调
Document-View
机制,因此在传统的
MFC
机制下,所有的
“
多视
”
文档必须在
MFC
机制内实现,经过几个月的努力,我把
MFC
、
ATL
类库在
VBA SDK6.1
的框架内融合在一起,将
MFC
的
CFrameWnd(
派生
)
类的
OnCreateClient
处理转化为一个
VBA
事件,这样做的直接结果是我们得到可以在
VB
框架内
“
描述
”OnCreateClient
处理的机会,以下是处理片段:
Private Sub Application_AppCreateVisualChildFrame(ByVal nTag As Long)
Dim h As Long
Select Case nTag
Case 0:
Me.CreateView TreeView
Case 1:
Me.CreateView GridView
Case 2:
Me.CreateView HtmlView
Case 3:
Me.CreateView FormView
Case 4:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter FormView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 2, 1, 0, h)
Me.CreateViewInSplitter GridView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter HtmlView, 1, 0, 0, 0, 0, h
Case 5:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter FormView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 2, 1, 0, h)
Me.CreateViewInSplitter HtmlView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 0, 0, h
Case 6:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter TreeView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 2, 1, 0, h)
Me.CreateViewInSplitter FormView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 0, 0, h
Case 7:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter TreeView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 3, 1, 0, h)
Me.CreateViewInSplitter FormView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 2, 0, 0, 0, 0, h
Case 8:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter TreeView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 3, 1, 0, h)
Me.CreateViewInSplitter FormView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 100, 0, h
Me.CreateViewInSplitter HtmlView, 2, 0, 0, 0, 0, h
Case 9:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter TreeView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 3, 1, 0, h)
Me.CreateViewInSplitter FormView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 100, 0, h
Me.CreateExcelTabWndInSplitter GridView, "test", 2, 0, 0, 0, h 'MS Excel WorkBook
型窗口
Case 10:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter FormView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 3, 1, 0, h)
Me.CreateViewInSplitter FormView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 100, 0, h
Me.CreateExcelTabWndInSplitter GridView, "test", 2, 0, 0, 0, h
Case 11:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter FormView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 4, 1, 0, h)
Me.CreateViewInSplitter HtmlView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 100, 0, h
Me.CreateExcelTabWndInSplitter GridView, "test", 2, 0, 0, 100, h
Me.CreateViewInSplitter GridView, 3, 0, 0, 100, 0, h
Case Else:
h = Me.CreateSplitter("", 1, 2, 0)
Me.CreateViewInSplitter TreeView, 0, 0, 100, 0, 0, h
h = Me.CreateNestedSplitter(0, 1, 3, 1, 0, h)
Me.CreateViewInSplitter FormView, 0, 0, 0, 100, 0, h
Me.CreateViewInSplitter GridView, 1, 0, 0, 100, 0, h
Me.CreateViewInSplitter HtmlView, 2, 0, 0, 0, 0, h
End Select
End Sub
(以上代码请参考第一份邮件的附件,其中有运行时图象)
由此,我们仅需要一个文档模板、一个
CFrameWnd
类、一个文档类
,
而一个具体的文档究竟有多少个视类取决于文档的一个特征参数,每个特征参数对应一个特定的
“
描述
”
(参考上述
Select-case
结构处理),我的工作表明在
VBA
的框架内
MFC
的
Document-View
体系完全可定制化,即:只要描述好相应的视类,即可产生丰富的、功能强大的文档。在
VisualDeveloper
中,我重点刻画了六个基本的视类:
1:ActiveDocument(VBDocument)
类
CAxDocView
;
2
:
CMFCFormView(host MS Form2(
请参考
Ms office
中的
UserForm))
;
3
:
CMfcHtmlView
;
4
:
CMfcGridView
(
Stingray
公司的
Object Grid Pro 8.0
的核心组件);
5
:
CMfcTreeView
;
6
:
CMfcListView
。其中前面四个类均具有可编辑、可编程功能,我认为以上六个类通过
CSplitterWnd
类(可嵌套使用
CSplitterWnd
,即:
CSplitterWnd
内创建
CSplitterWnd
)以及各类风格的
TABWnd(
如:类似
MsExcel
中的
WorkBook
型
Tab
窗口或其他类似
VisualStudio
中的
TabWnd)
足以组合成功能强大、形态丰富的复合文档,如果需要可以在
VisualDeveloper
机制中引入其他
MFC View
类
.Mfc
的
Document-View
机制明显的一个缺欠是:各个视口的交互作用必须通过指针在
C++
框架内完成,通过集成
VBA
,我实现了将每个视类映射成
VBA
可编程项,这样自然的在
VBA
框架内解决了视口类之间的交互调用问题,同时每个视类的数据成员、包含的方法等个性化问题全部提交给
VB
环节。通过集成
VBA
我们基本解决了用户界面设计问题(包括定制化对话框,由于
VBA
提供
Form
引擎,见
Office
),使得用户可以运用简单的
VBA
代码实现
MFC
风格的用户界面,同时具备传统
VB
的
Form
编程机制。
由于
VBA
自然支持
ADO
数据库机制,故在
VisualDeveloper
内用户可以通过
ADO
设计功能强大的数据库程序。高级的
VC++
程序员可以在
COM
体系上充分扩充
VisualDeveloper
的可编程对象,基于
MFC
、
ATL
、
Delphi
甚至
VB6.0
的
COM
组件可以通过
VB“
引用
”
的方式直接在
VisualDeveloper
中使用。由于
VisualDeveloper
是基于文档的,因此程序的维护十分方便。
VisualDeveloper
从某种意义上讲是一个扩展的
InternetExplorer,
由于支持
CHtmlView
,因此
VisualDeveloper
支持
Internet
开发,特别我们实现了对
InternetExplorer
的组件扩张,使得
Html
页面中可直接调用
VBAMacro
代码以及任意
COM
组件,同时
Html
可直接与宿主程序交互作用,在服务器端我们实现了基于
VBA
的多线程
NT
服务程序(
NT Service
)
,
因此
VisualDeveloper
可以支持基于
Internet
的
C/S
开发。……