最早的Tangram预览

 
最早的 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 系统开发、支持面向企业的应用系统开发。
   本系统的特点是支持流行的用户界面,如图:
最早的Tangram预览_第1张图片
本图显示由 VisualDeveloper 产生的一个程序文档,由一个 TreeView 、一个 VBAForm 、一个 Grid 组件以及一个类 MSExcel WorkBook GridBook (内置电子表格机制)组成, VBAForm MS Form2 ,文档布局由 MFC CSplitterWnd 实现,由于内置 VBA 框架,各个分窗元素可以在 VBA 框架内自然的交互作用,下图显示处于工作状态的 VBA IDE
最早的Tangram预览_第2张图片
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 文档:
最早的Tangram预览_第3张图片
其中弹出的 Form 是网页中的按纽实现的。 VisualDeveloper 中的 VBAForm 宿主 (Host)”Ms Form2 的一种可编程 Form ,下图显示一个处于设计环境的文档。
最早的Tangram预览_第4张图片
最早的Tangram预览_第5张图片
 
    VisualDeveloper 是一个可灵活二次开发的软件环境,由于集成了 VBA6.0 ,因此在 COM 框架内,各类程序员均有用武之地,特别我们提供 VBA 的多线程支持,这样,基于工控的软件或对多任务、多线程要求苛刻的应用也可融在 VisualDeveloper 内。
    VisualDeveloper 的开发借鉴了许多成熟软件的软件形式,我们的目标是实现一种具备 Html 特征,又具有传统程序特点的 文档 。我们准备近期在网上推出测试版本,希望业界朋友给予支持。如果各位朋友有针对 VisualDeveloper 的建议、要求,请与我联系,本人不胜感激!!!
   我的是 e-mail: [email protected]
 
附作者来信:
闻先生:
    关于 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 开发。……
 
 

你可能感兴趣的:(最早的Tangram预览)