注册 登录
Office中国论坛/Access中国论坛 返回首页

ganlinlao的个人空间 http://www.office-cn.net/?230471 [收藏] [复制] [分享] [RSS]

日志

在access窗体中显示网络图片。

热度 1已有 3819 次阅读2018-3-1 15:55 |个人分类:access入门

        作为一名垃圾级的access菜鸟,如果我们把access当成一个富客户端,也许我们的心态会更坦然一些。因为服务端可以用任意语言写后台程序,如果你愿意的话,你可用fasctCGI+nignx+vb6写一个性能同样很高的后台程序(注:这样的程序同样可以运行在linux上,没有任何障碍)。
       接下来的问题是 在access窗体中显示网络图片。
       1、一般我们在access窗体中使用webbrowser用来显示网络图片,webbrowser可以显示任意常见的网络图片,这没有任何问题。
      当然用webbrowser,你要注意一些细节。但因为webbrowser权重很大,为了显示图片,调用webbrowser是不是有点小题大作了,所以才会萌生寻找一些更轻量的办法。
       2、下面就是在寻找更轻量级的办法中遇到的几个注意点,特此记录一下:
       (1)application.loadpicture 方法,并不支持加载网络图片。
         (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),网络图片、图片文件都行
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格式的网络图片没问题
      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格式的网络图片没问题
        测试例子:      

      (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)既然涉及到显示网络图片,如果要显示的网络图片很多,自然要考虑异步的多线程


发表评论 评论 (1 个评论)

回复 tmtony 2018-5-10 06:20
    新的出路!赞一个!

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 07:43 , Processed in 0.063848 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部