注冊 登錄
Office中國論壇/Access中國論壇 返回首頁

ganlinlao的個人空間 http://m.mzhfr.cn/?230471 [收藏] [復制] [分享] [RSS]

日志

在access窗體中顯示網(wǎng)絡圖片。

熱度 1已有 4013 次閱讀2018-3-1 15:55 |個人分類:access入門

        作為一名垃圾級的access菜鳥,如果我們把access當成一個富客戶端,也許我們的心態(tài)會更坦然一些。因為服務端可以用任意語言寫后臺程序,如果你愿意的話,你可用fasctCGI+nignx+vb6寫一個性能同樣很高的后臺程序(注:這樣的程序同樣可以運行在linux上,沒有任何障礙)。
       接下來的問題是 在access窗體中顯示網(wǎng)絡圖片。
       1、一般我們在access窗體中使用webbrowser用來顯示網(wǎng)絡圖片,webbrowser可以顯示任意常見的網(wǎng)絡圖片,這沒有任何問題。
      當然用webbrowser,你要注意一些細節(jié)。但因為webbrowser權重很大,為了顯示圖片,調(diào)用webbrowser是不是有點小題大作了,所以才會萌生尋找一些更輕量的辦法。
       2、下面就是在尋找更輕量級的辦法中遇到的幾個注意點,特此記錄一下:
       (1)application.loadpicture 方法,并不支持加載網(wǎng)絡圖片。
         (2)使用oleloadpicturePath加載圖片:
                  模塊中代碼:
Private Declare Function OleLoadPicturePath Lib "oleaut32.dll" (ByVal szURLorPath As Long, ByVal punkCaller As Long, ByVal dwReserved As Long, ByVal clrReserved As OLE_COLOR, ByRef riid As TGUID, ByRef ppvRet As IPicture) As Long
 Private Type TGUID
       Data1 As Long
       Data2 As Integer
      Data3 As Integer
      Data4(0 To 7) As Byte
End Type

'// 從Internet上加載圖片
'// 使用方法:Picture1.Picture = LoadPic(imgURL),網(wǎng)絡圖片、圖片文件都行
Public Function LoadPic(ByVal strFileName As String) As Picture
    Dim IID As TGUID
    With IID
        .Data1 = &H7BF80980
        .Data2 = &HBF32
        .Data3 = &H101A
        .Data4(0) = &H8B
        .Data4(1) = &HBB
        .Data4(2) = &H0
        .Data4(3) = &HAA
        .Data4(4) = &H0
        .Data4(5) = &H30
        .Data4(6) = &HC
        .Data4(7) = &HAB
    End With
   
    On Error GoTo LocalErr
    OleLoadPicturePath StrPtr(strFileName), 0&, 0&, 0&, IID, LoadPic
    Exit Function
LocalErr:
    Set LoadPic = Application.LoadPicture(strFileName)
    Err.Clear
End Function
      問題1:access的image控件的picture居然和stdole.picture接口不一樣
      換句話說  me.image0.picture=loadpict("https://……/*.jpg")會無法顯示圖片
      我們先暫時在窗體中引用excel的userform中的image控件。因為只要office安裝有vba,form2.0中的控件一定會被安裝帶上。
       Me.VBAImage0.Picture = LoadPic("http://a.hiphotos.baidu.com/image/pic/item/0824ab18972bd407bd49abdc77899e510fb30900.jpg")  '加載http格式的網(wǎng)絡圖片沒問題
      Me.VBAimage1.Picture = LoadPic("https://timg01.bdimg.com/timg?pacompress&imgtype=1&sec=1439619614&autorotate=1&di=1399da507d1400909c73123495953696&quality=90&size=b870_10000&src=http%3A%2F%2Fpic.rmb.bdstatic.com%2F4553873ebf2984969e464de529d44671.jpeg")   '加載https格式的網(wǎng)絡圖片沒問題
        測試例子:      

      (3)使用OleloadPicturePath方式加載圖片,顯然是有比較的限制的。比如access的image控件無法顯示,png格式的圖片不支持,在IE臨時文件夾生成緩存圖……,

接下來,我們使用另一種方式。使用xmlhttp控件加載圖片。

        在模塊中寫入:

       Public Function loadNetpic(ByVal strFilename As String) As Variant
                Dim xmlhttp As New MSXML2.ServerXMLHTTP60
               With xmlhttp
                           .Open "get", strFilename, False
                          .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
                        .send
       End With
       Do    While xmlhttp.ReadyState <> 4
               DoEvents
      Loop
      loadNetpic = xmlhttp.responseBody
     Set xmlhttp = Nothing
      End Function

     在窗體中

     Me.Image0.PictureData = loadNetpic("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000& sec=1519991491223&di=e1a8deaca7ffddf1ddf23edb79444c17&imgtype=0&src=http%3A%2F%2Fpic35.photophoto.cn%2F20150507%2F0021033804457704_b.png")            

'不使用image.picture 直接使用picutreData

'使用png文件沒有任何問題,但不支持顯示gif。

    (4)既然涉及到顯示網(wǎng)絡圖片,如果要顯示的網(wǎng)絡圖片很多,自然要考慮異步的多線程


發(fā)表評論 評論 (1 個評論)

回復 tmtony 2018-5-10 06:20
    新的出路!贊一個!

facelist doodle 涂鴉板

您需要登錄后才可以評論 登錄 | 注冊

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 03:11 , Processed in 0.059353 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部