讓圖片無跡可尋

發表于:2007-07-01來源:作者:點擊數: 標簽:
提要:在我們的軟件 開發 中,常常需要在界面上放置很多圖片,這往往會造成可執行文件大小的大幅度增長。本文通過 VB 組件,將所需要的圖片封裝起來,從而減小可執行文件大小的目的。 關鍵字:資源、資源文件、VB組件、封裝 程序員 在開發軟件的時候,常常需

提要:在我們的軟件開發中,常常需要在界面上放置很多圖片,這往往會造成可執行文件大小的大幅度增長。本文通過VB組件,將所需要的圖片封裝起來,從而減小可執行文件大小的目的。

 

關鍵字:資源、資源文件、VB組件、封裝

 

       程序員在開發軟件的時候,常常需要很多圖片來美化程序界面,工具欄,菜單等控件都會用到大量的圖片,按照常規的方法,我們一般通過VB開發環境直接導入需要的圖片,如BMP或圖標文件;這樣做的好處是方便簡單,但也帶來了大幅度增長主執行文件大小的麻煩。另一種方法是通過loadpicture函數動態加載指定目錄下的圖片文件,但把圖片文件和主程序一起發布后很容易被誤刪。那么,有沒有什么方法來防止這些情況的發生呢?

 

       當然有。

 

       資源是指可供我們使用的存儲在計算機內的數據。包括字符串資源、圖標資源、游標資源、位圖資源以及自定義資源(可以是任意類型的文件,如.exe、.doc等類型的文件)。資源文件則是指用來存放各種資源的文件,資源文件源文件的擴展名為.rc,他是一個文本文件,使用任何文本編輯器都可以編輯。通過資源編譯器編譯后的文件擴展名是.res,簡單的說,這個.res文件能把所有指定的資源全部包括進來,更形象一點,就像一個壓縮文件包括很多個文件夾或文件一樣。

 

       VB6.0為我們提供了一個非常好用的工具——資源編輯器。該編輯器不需要我們寫.rc文件而通過一種更直接更友好的可視化操作完成資源的編輯,保存后會自動生成.res文件。

 

       資源文件生成后,我們創建一個ActiveX dll組件,并把該資源文件添加進來。然后,通過相關的函數把資源導出供主程序調用。

 

       下面是整個操作過程。

1、  新建一個ActiveX DLL工程,工程名為:prjPictureRes

2、  依次打開:外接程序->外接程序管理器->VB6.0資源編輯器,雙擊,確定。此時,在工具欄上出現一個資源管理器的按鈕。

3、  點擊“VB資源編輯器”按鈕,出現如下的資源編輯器窗口。

                                                 圖1

4、  按圖1所示,添加四個圖標和一個位圖,點擊“保存”,將生成一個擴展名為.res的資源文件,我們將該文件命名為Myres.res。同時,工程資源管理器會出現一個“相關文檔”的節點,如圖2:

圖2

5、  在類模塊class1中,我們寫如下代碼將相應的資源導出。

Public Function LoadRes(resID As Integer, ImgType As Integer) As IPictureDisp

    Set LoadRes = LoadResPicture(resID, ImgType)

End Function

其中:參數resID為資源號,ImgType為圖片類型(位圖、圖標或光標),這兩個參數傳入LoadResPicture()函數,下面,對LoadResPicture()簡單講解。

語法:

               LoadResPicture(index as integer, format as integer) as IpictureDisp

參數:

        index: 必需的。一個整數或字符串,它用來指定資源文件中數據的標識符 (ID) 。ID標識符為 1 的資源保留給應用程序的圖標。

Format: 必需的。一個數值或常數,如下列“設置值”中所描述的,指定返回數據的格式:            

   

              常數                                  值          描述

              VbResBitmap                     0            位圖資源

vbResIcon                         1            圖標資源

vbResCursor                      2            光標資源

6、  編譯成prjPictureRes.dll文件。至此,ActiveX DLL文件已經完成。

7、  接下來做一個測試工程,新建一個EXE工程,在窗體上放一個工具欄,用來顯示.DLL文件中的圖標;一個ImageList控件;一個圖像控件(Image),用來顯示.dll文件中的位圖。界面如圖3。

                                                               圖3

8、  將剛才完成的prjPictureRes.dll組件通過“工程->引用”的方法加入到工程中。

9、  在窗體的Load事件中寫如下代碼:

Private Sub Form_Load()

    Dim objRes As prjPictureRes.Class1

    Set objRes = New prjPictureRes.Class1

   

    Dim aImage As ListImage

   

    ´設置圖標的高度和寬度

    ImageList1.ImageHeight = 24

    ImageList1.ImageWidth = 24

   

    ´往圖像列表控件中添加圖標(101、102、103、104為資源編號,下同)

    Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(101, vbResIcon))

    Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(102, vbResIcon))

    Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(103, vbResIcon))

    Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(104, vbResIcon))

   

    ´與工具欄關聯

    Set Toolbar1.ImageList = ImageList1

   

    ´添加工具欄按并設置圖標

    Dim aButton As Button

    Set aButton = Toolbar1.Buttons.Add(, , "新建", , 1)

    aButton.ToolTipText = "新建"

    Set aButton = Toolbar1.Buttons.Add(, , "打開", , 2)

    aButton.ToolTipText = "打開"

    Set aButton = Toolbar1.Buttons.Add(, , "", tbrSeparator)

    Set aButton = Toolbar1.Buttons.Add(, , "保存", , 3)

    aButton.ToolTipText = "保存"

    Set aButton = Toolbar1.Buttons.Add(, , "另存為", , 4)

    aButton.ToolTipText = "另存為..."

   

    ´設置工具欄其他屬性

    Toolbar1.Style = tbrFlat ´以Flat形式顯示

   

    ´設置Image1控件屬性

    Image1.Stretch = True ´圖片自適應

   

    ´將位圖資源加載到Image1控件中(105為資源編號)

    Set Image1.Picture = objRes.LoadRes(105, vbResBitmap)

    ´釋放資源

    Set aImage = Nothing

    Set aButton = Nothing

    Set objRes = Nothing

End Sub

 

至此,大功告成,一起來欣賞一下我們的最終作品(圖4)。

 

 


原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97