科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用Visual Basic轻松实现看图软件

用Visual Basic轻松实现看图软件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在VB中可以很容易地实现像ACDsee这样的具有基本看图功能的软件。

作者:海蓝 来源:天极网 2007年10月14日

关键字: Visual Basic 看图软件

  • 评论
  • 分享微博
  • 分享邮件
一、 前言

  在日常的工作或学习中,像一些常用的工具是必不可少的。比如ACDsee,WinRAR等等。其实在VB中就可以很容易地实现像ACDsee这样的一些基本看图功能,用着自己编写的看图软件,感觉是不是非常棒?!好了,言归正传,现在就开始编写吧!

  二、分析与实现

  编写之前,首先把一些重要的实现功能思考一下。明白了原理,做其他类似的程序,应该是轻车熟路了。

  1) 在选择的目录中过滤出图片格式的文件(gif,jpg,bmp,ico等)功能:

  VB中自带的DriveListBox,DirListBox,FileListBox控件组合就可以轻易的实现上述功能,将FileListBox的Pattern属性设置为*.jpg;*.bmp;*.ico;*.gif即可,这样FileListBox中只显示Pattern属性设定好的扩展名所对应的图片文件。

  2) 将当前目录下的图片按分页的方式显示功能:

  关于显示图片的控件问题,其实用VB自带的Image控件就可以了。对于如何实现分页的问题,就需要按照自定义的显示图片数量/页(本程序定义为25张图片/页),动态生成Image控件组,然后将目录中的图片以缩放预览的方式显示出来,具体实现参见后面的代码。

  以上两个问题解决了,基本功能应该可以实现了。下面就是具体的实现步骤:

  a) 主窗体设计

  主窗体布局采用流行的T型框架,上方包括菜单及常用工具栏,左侧显示目录结构树,右侧为显示图片区域(图片预览区),下方为状态栏,用来显示简单的图片信息。下表是用到的部分控件列表:

控件名 控件类型 标题 说明
Command1(1) CommandButton 上一页 预览上一页图片
Command1(0) CommandButton 下一页 预览下一页图片
Picture1 PictureBox   用来装入预览控件组的容器控件
Image1(0) Image   显示图片控件
Drive1 DriveListBox   显示当前系统的磁盘列表
Dir1 DirListBox   显示当前磁盘的目录列表
File1 FileListBox   显示当前目录的图片格式文件列表

  b) 代码实现

  通过以下一段代码将驱动器列表控件、目录列表控件、文件列表控件联系起来。

Private Sub Dir1_Change()
 File1.Path = Dir1.Path
End Sub

Private Sub Drive1_Change()
 Dir1.Path = Drive1.Drive
 Call InitShowPic
End Sub


Private Sub File1_PathChange() ‘当文件列表发生变化时重新显示图片
 Call InitShowPic
End Sub

  其中InitShowPic是自定义函数,用来显示当前目录下的第一页图片。主窗体初始化时,需要先将显示图片的Image控件组动态创建,以下就是创建代码:

Private Sub Form_Load()
 Dim i, j As Integer
 For i = 1 To 24 ‘动态创建24个Image控件
  Load Image1(i) ‘动态创建Image控件
  Image1(i).Visible = True ‘显示此控件
 Next

 Drive1.Drive = "c:" ‘默认驱动器为C:
 Dir1.Path = "c:\"
 Picture1.DrawWidth = 3
 For i = 1 To 4 ‘在Picture画线将Image控件组以5×5排列
  Picture1.Line (0, i * (Picture1.Height \ 5) - 30)-(Picture1.Width, i * (Picture1.Height \ 5) - 30), &H80000003

  Picture1.Line (i * (Picture1.Width \ 5) - 30, 0)-(i * (Picture1.Width \ 5) - 30, Picture1.Height), &H80000003
 Next

 For i = 0 To 4
  For j = 0 To 4
   Image1(i * 5 + j).Left = j * (Picture1.Width \ 5) + 50
   Image1(i * 5 + j).Top = i * (Picture1.Height \ 5) + 50
  Next
 Next
 currindex = -1 ‘当前选择图片的索引为-1表示没有选择图片
End Sub


Private Sub InitShowPic() ‘显示当前目录的第一页图片(1到25)
 Dim i As Integer
 For i = 0 To 24 ‘所有Image控件不显示图片
  Image1(i).Picture = LoadPicture("")
  Image1(i).ToolTipText = ""
 Next
 If File1.ListCount = 0 Then ‘如果当前目录没有图片
  StatusBar1.Panels(1).Text = ""
  StatusBar1.Panels(2).Text = ""
  StatusBar1.Panels(3).Text = ""
  StatusBar1.Panels(4).Text = ""
  StatusBar1.Panels(4).Visible = False
  If currindex <> -1 Then ‘如果选择了图片,则显示此图片的Image控件的边框风格改为平板风格
   Image1(currindex).Appearance = 0
  End If 
  currpage = 1: currindex = -1 ‘当前选择的页号为1并不选择图片
  Exit Sub
 End If
 currpage = 1: currindex = -1 ‘如果当前目录有图片,则将页号赋值为1并不选择图片
 Call DisplayPicPage(currpage) ‘调用自定义函数显示指定页号的图片
End Sub

Private Sub DisplayPicPage(page As Integer) ‘显示指定页的图片
 Dim i As Integer
 Dim usetime As Long
 On Error Resume Next
 usetime = GetTickCount
 If (File1.ListCount - (25 * (page - 1)) < 25) And (File1.ListCount - (25 * (page - 1)) > 0) Then
  For i = 0 To File1.ListCount Mod 25 - 1
   Image1(i).Picture = LoadPicture(Dir1.Path + "\" + File1.List((page - 1) * 25 + i))
   Image1(i).ToolTipText = File1.List((page - 1) * 25 + i)
  Next
  For i = File1.ListCount Mod 25 To 24
   Image1(i).Picture = LoadPicture("")
   Image1(i).ToolTipText = ""
  Next
  StatusBar1.Panels(1).Text = "图片:" & File1.ListCount & "(张)" + Space(5) + "当前第" & (currpage - 1) * 25 + 1 & "-" & (currpage - 1) * 25 + File1.ListCount Mod 25 & "张"

 Else
  For i = 0 To 24
   Image1(i).Picture = LoadPicture(Dir1.Path + "\" + File1.List((page - 1) * 25 + i))
   Image1(i).ToolTipText = File1.List((page - 1) * 25 + i)
  Next
  StatusBar1.Panels(1).Text = "图片:" & File1.ListCount & "(张)" + Space(5) + "当前第" & (currpage - 1) * 25 + 1 & "-" & currpage * 25 & "张"

 End If

 StatusBar1.Panels(4).Text = "用时:" & GetTickCount - usetime & "(ms)"
 StatusBar1.Panels(4).Visible = True
End Sub

‘点击【上一页】,【下一页】按钮事件

Private Sub Command1_Click(Index As Integer)
 File1.Refresh
 If File1.ListCount = 0 Then Exit Sub
 Select Case Index
  Case 0
   If currpage = (File1.ListCount \ 25 + 1) Then Exit Sub
   currpage = currpage + 1
   Call DisplayPicPage(currpage)
  Case 1
   If currpage = 1 Then Exit Sub
   currpage = currpage - 1
   Call DisplayPicPage(currpage)
  Case 2
   If currindex <> -1 Then
    Image1(currindex).Appearance = 0
   End If
   Call InitShowPic
 End Select
End Sub

  以上代码是程序的重点,后两个函数我没有注释,大家可以自己分析一下。最后不要忘了,动态创建的资源要及时释放,所以在Form_Unload事件中加上以下代码即可。

Private Sub Form_Unload(Cancel As Integer)
 Dim i As Integer
 For i = 1 To 24
  Unload Image1(i)
 Next
End Sub

  在此基础上,大家可以加上一些图片处理的功能,现在网络上有很多此方面的控件下载(比如Polar Draw等等),这样就可以和ACDsee相媲美了哦~~~

  下图是我的程序截图,程序在VB6.0+WINDOWS2000环境下编译通过。


查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章