您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VB >> 真题 >> 正文    
  用VisualBasic轻松实现看图软件 【注册男护士专用博客】          

用VisualBasic轻松实现看图软件

www.nanhushi.com     佚名   不详 

  一、 前言

  在日常的工作或学习中,像一些常用的工具是必不可少的。比如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相媲美了

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。