最早的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系統開發、支持面向企業的應用系統開發。
   本系統的特點是支持流行的用戶界面,如圖:
本圖顯示由VisualDeveloper產生的一個程序文檔,由一個TreeView、一個VBAForm、一個Grid組件以及一個類MSExcel WorkBookGridBook(內置電子表格機制)組成,VBAFormMS Form2,文檔佈局由MFCCSplitterWnd實現,由於內置VBA框架,各個分窗元素可以在VBA框架內自然的交互作用,下圖顯示處於工作狀態的VBA IDE
VisualDeveloper目前支持由以下六種對象進行任意分窗組合產生功能強大的用戶程序文件:1ActiveDocument(包含VB Document)2HtmlView3VBAForm(MS Form2)4GridView(由美國Stingray開發的Object Grid Pro組件)5TreeView6ListView
    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的建議、要求,請與我聯繫,本人不勝感激!!!
   我的是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機制內實現,經過幾個月的努力,我把MFCATL類庫在VBA SDK6.1的框架內融合在一起,將MFCCFrameWnd(派生)類的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的框架內MFCDocument-View體系完全可定製化,即:只要描述好相應的視類,即可產生豐富的、功能強大的文檔。在VisualDeveloper中,我重點刻畫了六個基本的視類:1:ActiveDocument(VBDocument)CAxDocView2CMFCFormView(host MS Form2(請參考Ms office中的UserForm))3CMfcHtmlView4CMfcGridViewStingray公司的Object Grid Pro 8.0的核心組件);5CMfcTreeView6CMfcListView。其中前面四個類均具有可編輯、可編程功能,我認爲以上六個類通過CSplitterWnd類(可嵌套使用CSplitterWnd,即:CSplitterWnd內創建CSplitterWnd)以及各類風格的TABWnd(如:類似MsExcel中的WorkBookTab窗口或其他類似VisualStudio中的TabWnd)足以組合成功能強大、形態豐富的複合文檔,如果需要可以在VisualDeveloper機制中引入其他MFC View.MfcDocument-View機制明顯的一個缺欠是:各個視口的交互作用必須通過指針在C++框架內完成,通過集成VBA,我實現了將每個視類映射成VBA可編程項,這樣自然的在VBA框架內解決了視口類之間的交互調用問題,同時每個視類的數據成員、包含的方法等個性化問題全部提交給VB環節。通過集成VBA我們基本解決了用戶界面設計問題(包括定製化對話框,由於VBA提供Form引擎,見Office),使得用戶可以運用簡單的VBA代碼實現MFC風格的用戶界面,同時具備傳統VBForm編程機制。
    由於VBA自然支持ADO數據庫機制,故在VisualDeveloper內用戶可以通過ADO設計功能強大的數據庫程序。高級的VC++程序員可以在COM體系上充分擴充VisualDeveloper的可編程對象,基於MFCATLDelphi甚至VB6.0COM組件可以通過VB“引用的方式直接在VisualDeveloper中使用。由於VisualDeveloper是基於文檔的,因此程序的維護十分方便。VisualDeveloper從某種意義上講是一個擴展的InternetExplorer,由於支持CHtmlView,因此VisualDeveloper支持Internet開發,特別我們實現了對InternetExplorer的組件擴張,使得Html頁面中可直接調用VBAMacro代碼以及任意COM組件,同時Html可直接與宿主程序交互作用,在服務器端我們實現了基於VBA的多線程NT服務程序(NT Service,因此VisualDeveloper可以支持基於InternetC/S開發。……
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章