• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用vb6設計縮略圖功能的圖片瀏覽器

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 38次 | 進入軟件測試論壇討論

    領測軟件測試網 相信每個編程愛好者都非常熟悉ACD SEE,它的縮略圖察看功能和對種類繁多的圖片文件的支持使它成為使用最廣泛的圖片瀏覽軟件之一,F在,我們也可以輕松的設計一個具有縮略圖察看功能的圖片瀏覽器,它能夠支持JPG、GIF、JPEG、BMP、WMF、DIB、ICO、CUR等格式圖片文件。

    (一)編程思路;

      性能良好的圖片瀏覽器首先要能夠支持廣泛的圖片文件格式 ,這一點VB6基本控件picture已經為我們做好了。我們所要考慮的是如何將一幅圖片極其清晰的按照設定大小顯示到“容器”中——“容器”可以是多種多樣的,而且要充分利用動態創建和卸載控件技術,以便適應不同目錄所含有的不同個數的圖片,當然正確、有序排列縮略圖片也是非常關鍵的。

      我在這里向大家展示利用動態創建COMMAND(按鈕)控件作為載體的實現方法,它不僅可以以縮略圖方式進行圖片預覽和全屏圖片瀏覽,而且可以自動隨窗體的變化進行相應的伸展——注意本文關于界面容器、縮略圖載體容器和縮略圖載體的概念。

    (二)界面設計;

     。1)添加四個command控件command(1——8)Style = 1 ’Graphical,caption屬性分別是“選擇”、“瀏覽”、“預覽”(縮略圖察看)、“上一張”、“下一張”、“向下”、“向上”、“退出”——這些按鈕用來進行系統相關操作,它們是可以添加圖片的;

     。2)添加一個filelist控件filhidden,設置其 Pattern= "*.bmp;*.dib;*.rle;*.gif;*.jpg;*.wmf;*.emf;*.ico;*.cur",visible=fales——該文件列表控件用來讀取選中目錄下的所有圖片文件名稱,程序運行時是不可見的;

     。3)添加picture控件picFrame作為界面容器;在其上面添加四個picture控件picSlide作為縮略圖載體容器,picload設置autosize=true作為緩沖圖片要以原格式裝載圖片,picThumb用來裝載縮略后的圖片;一個VScrollBarL控件vsbSlide——用來進行圖片調整,以便在縮略圖較多時能夠進行相應的調整,picture1用來全屏顯示圖片;設置上述所有圖片控件ScaleMode=3’Pixel;它們用來進行界面調整和縮略圖片的生成;

     。4)在縮略圖載體容器picslide上面添加命令按鈕command控件數組原型com(0),設置其 Style = 1 ’Graphical、Visible = 0 ;——用來作為縮略圖片的載體;

     。5)添加一個StatusBar控件St ——用來顯示有關的信息;

     。6)單擊"工程"菜單項目,選擇"部件",在部件對話框的"控件"欄目中選擇"MICROSOFT WINDOWS COMMON CONTROLS 6.0",確認在它前面的復選框中有一個黑色的對號,單擊"確認",添加對該控件的引用。添加一個progressbar控件pb——用來顯示縮略圖的集成進度;

     。7)添加定時器timer1——用來實行圖片的幻燈瀏覽;按層次調整上述控件到適當位置(如圖片1所示);



    (三)程序源代碼;

    Option Explicit
    Dim Apath As String, Pi As Integer, bZ As Integer
    .......

    Private Declare Function StretchBlt Lib "GDI32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal XSrc As Long, ByVal YSrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

    //本函數用來對圖片進行縮放處理,生成縮略圖片
    .......

    Private Sub CreateThumbs()

    //本函數用來創造縮略圖片,并且將它們放到足夠的

    file://縮略圖載體com(i)中

    Dim lIdx As Long
    Dim lFilCnt As Long
    Dim sText As String, i As Integer
    Screen.MousePointer = vbHourglass

    //設置鼠標指針為漏斗類型

    picSlide.Move 0, 0, Com(0).Width, Com(0).Height
    picSlide.Visible = True

    //初始化縮略圖容器載體

    Pr.Visible = True
    Pr.Value = 0
    Pr.Max = filHidden.ListCount
    Pr.Min = 0

    //啟動進度條

    Com(0).Picture = LoadPicture
    Com(0).Visible = False
    If Com.Count > 1 Then
    For i = 1 To Com.Count - 1
    Unload Com(i)
    Next
    End If
    $$$AGESEP$$$
    //初始化縮略圖載體com

    On Error Resume Next

    file://忽略錯誤

    file://lFilCnt = filHidden.ListCount
    For lIdx = 0 To filHidden.ListCount - 1
    Load Com(lIdx)
    Com(lIdx).Caption = filHidden.List(lIdx)
    Com(lIdx).Visible = True
    Pr.Value = 1
    Next lIdx

    //創建所需要的所有縮略圖載體

    file://載體的個數等于選定目錄下圖片文件個數

    Call Form_Resize

    //對載體進行排序

    DoEvents
    For lIdx = 0 To filHidden.ListCount - 1
    picLoad.Picture = LoadPicture()
    picThumb.Cls
    picLoad.Picture = LoadPicture(Apath & filHidden.List(lIdx))
    StretchBlt picThumb.hdc, 0, 0, picThumb.Width, picThumb.Height,picLoad.hdc, 0, 0, _ picLoad.ScaleWidth, picLoad.ScaleHeight, vbSrcCopy
    Set Com(lIdx).Picture = picThumb.Image

    //按順序為載體添加縮略圖片

    DoEvents
    Pr.Value = lIdx + 1
    Next lIdx
    Set picLoad.Picture = LoadPicture()
    Set picThumb.Picture = LoadPicture()
    Pr.Visible = False
    Screen.MousePointer = 0

    //釋放占用的資源、隱藏進度條、恢復鼠標指針

    End Sub
    .......
    Private Sub filHidden_PathChange()
    $$$AGESEP$$$
    //當文件目錄改變時計算出標準的目錄變量

    file://顯示有關的目錄和圖片文件個數信息

    file://調用縮略圖創建過程函數

    //......

    CreateThumbs
    End Sub
    Private Sub Form_Resize()

    file://本函數用來對程序界面控件位置進行相應的調整

    file://并且調整縮略圖的位置

    Dim X As Long
    Dim Y As Long
    Dim lIdx As Long
    Dim lCols As Long
    If Me.WindowState <> vbMinimized Then
    If Me.Width < 600 * Screen.TwipsPerPixelX Then
    Me.Width = 600 * Screen.TwipsPerPixelX
    ElseIf Me.Height < 378 * Screen.TwipsPerPixelY Then
    Me.Height = 378 * Screen.TwipsPerPixelY
    end if

    //限定軟件界面的最小寬度和高度

    Else
    picFrame.Move 2, Command1.Height, Me.ScaleWidth - 11, Me.ScaleHeight - Command1.Height - St.Height
    vsbSlide.Move picFrame.ScaleWidth - vsbSlide.Width, 0, vsbSlide.Width, picFrame.ScaleHeight
    lCols = Int((picFrame.ScaleWidth - vsbSlide.Width) / Com(0).Width)
    For lIdx = 0 To Com.Count - 1
    X = (lIdx Mod lCols) * Com(0).Width
    Y = Int(lIdx / lCols) * Com(0).Height
    Com(lIdx).Move X, Y
    Next lIdx
    picSlide.Width = lCols * Com(0).Width
    picSlide.Height = Int(Com.Count /lCols)*Com(0).Height
    If Int(Com.Count / lCols) < (Com.Count / lCols) Then
    picSlide.Height = picSlide.Height + Com(0).Height
    End If
    vsbSlide.Value = 0
    vsbSlide.Max = picSlide.Height - picFrame.ScaleHeight
    If vsbSlide.Max < 0 Then
    vsbSlide.Max = 0
    vsbSlide.Enabled = False
    Else
    vsbSlide.Enabled = True
    vsbSlide.SmallChange = Com(0).Height
    vsbSlide.LargeChange = picFrame.ScaleHeight
    End If
    End If
    Pr.Top = St.Top + 8
    Pr.Left = St.Panels(4).Left + 6
    Picture1.Move (picFrame.Width - Picture1.Width) / 2, (picFrame.Height - Picture1.Height) / 2
    End Sub
    ........
    Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    $$$AGESEP$$$
    file://如果被全屏瀏覽的圖片較大時

    file://可以用鼠標拖動圖片來瀏覽全貌

    ReleaseCapture
    SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
    End Sub
    .......
    Private Sub vsbSlide_Change()

    //當縮略圖較多時可以移動滑塊進行瀏覽

    picSlide.Top = -vsbSlide.Value
    End Sub

    (四)運行調試

      本文程序展示了有關縮略圖預覽等的全部核心技術,至于界面、縮略圖載體容器和載體可以由編程愛好者們自由發揮、改造。為了加快縮略圖集成速度,大家可以考慮使用多線程內存文件映射技術——相信你很快就可以和ACD一較高下了!

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>