1、简易图片浏览软件设计目 录内容1选题背景22方案论证23软件设计34程序代码55结果分析186总结19参考文献 201 选题背景基于Microsoft Visual Basic 6.0环境的图片浏览器。对Microsoft Visual Basic 6.0软件的进一步了解,运用所学知识解决实际问题。本课题解决的主要问题及技术要求有:1) 多个图片的添加与编号。2) 对已打开图片的文件名以及文件路径的记录并与原图片相对应。3) 已添加图片的单个选择查看。4) 实现图片的上一张,下一张切换。5) 可以自动播放已经添加的图片。6) 对大图片的适应窗口缩放。7) 图片的任意放大缩小,与放大或缩小以后的
2、图片移动(可以通过鼠标拖动与点击按钮两种方式进行)。8) 可以将正在查看的图片在windows系统的画图板中打开编辑。9) 将选择的图片另存为。2 方案论证程序设计原理:1) 使用菜单栏、工具栏以及按钮操作程序。2) 使用commondialog控件来添加文件。3) 使用imagelist控件来对添加的图片标号,记录。4) 使用数组记录所添加图片的文件名、以及文件路径,并在状态栏显示。5) 使用picture控件和image控件来显示图片。6) 使用timer控件控件自动播放的时间。程序采用方案图片使用imagelist编号并加载。文件名与路径使用两个字符数组Names()与Lu()分别记录。
3、3 软件设计流程界面设计功能设计程序编写运行调试控件对象属性列表表1 控件属性表默认名称NameCaptionEnableCommand1Command1上一个TrueCommand2Command2自动播放TrueCommand3Command3下一个TrueCommand4Command4适应窗口TrueCommand5Command5上移EnableCommand6Command6左移EnableCommand7Command7下移EnableCommand8Command8右移EnableCommand9Command9缩小EnableCommand10Command10放大Enabl
4、eCombo1Combo1TrueTimer1Timer1EnableTimer2Timer2Enable菜单栏属性 图3-1 菜单栏“文件” 图3-2 菜单栏“编辑” 图3-3 菜单栏“设置” 图3-4 菜单栏“帮助” 图3-5 菜单栏属性工具栏属性图3-6 工具栏状态栏属性图3-7 状态栏程序运行截图图3-8 程序运行界面4 程序设计代码Public Time As Integer, a As IntegerDim Names(100) As String, Lu(100) As String 定义文件名和文件路径的数组Public x1 As Single, y1 As SinglePu
5、blic p As IntegerConst begin_drag = 1 开始拖动*Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single) 图片缩小后拖动的重画Image1.Picture = SourceForm1.Image1.Picture = LoadPicture(StatusBar1.Panels(4) 拖动后重画picture中的图片Image1.Move (X - x1), (Y - y1) Label2.Caption = 图片当前位置 ( & Image1.Left & , &
6、Image1.Top & )End Sub*Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 拖动x1 = X 确定重画的坐标y1 = YImage1.Drag begin_dragLabel2.Caption = 图片当前位置 ( & Image1.Left & , & Image1.Top & )End Sub*Private Sub Toolbar1_ButtonClick(ByVal Button As MSComCtlLib.Button) 工具栏 O
7、n Error Resume Next Select Case Button.Key Case 打开 Dim i As Integer a = Val(InputBox(请输入要打开的图片张数, 输入一个整数) If a = 0 Then GoTo Line1 未输入或点击取消 End If For i = 1 To a CD1.ShowOpen Lu(i) = CD1.FileName If CD1.FileName = Then GoTo Line1 如果点击取消后返回窗体 End If Names(i) = CD1.FileTitle Combo1.AddItem Lu(i) 将所选的图
8、片加载到combo1 ImageList1.ListImages.Add , , LoadPicture(Lu(i) 将所选的图片加载到imagelist1 Next i Picture1.Picture = LoadPicture(Combo1.List(0)添加后默认显示第一张图片 StatusBar1.Panels(4) = Lu(1) 在状态栏显示文件路径 StatusBar1.Panels(2) = Names(1) 在状态栏显示文件名 OpenPicture.Enabled = False Save.Enabled = True Case 保存 CD1.ShowSave If Sh
9、owSave = vbOK Then 点击确认后保存文件 SavePicture Picture1, CD1.FileName End If Case 帮助 Shell c:windowssystem32notepad.exe + readme.txt 显示帮助文档 *.exe后要加空格 End SelectLine1:End Sub*Private Sub Form_Load()Timer1.Enabled = TrueTimer1.Interval = 1000CD1.Filter = 所有文件(*.jpg,*.bmp,*.jpeg)|*.jpg;*.bmp;*.jpeg|jpg格式|*.
10、jpg|jpeg格式|*.jpeg|bmp格式|*.bmpImage1.Visible = FalseIf Picture1 = 0 Then 未加载图片保存按钮不可用 Save.Enabled = FalseEnd IfEnd Sub*Private Sub Combo1_Click()Image1.Top = 0: Image1.Left = 0: Image1.Height = 8000: Image1.Width = 10000If Image1.Visible = False Then Picture1.Picture = LoadPicture(Combo1.Text) 当前显示的
11、图片 StatusBar1.Panels(4) = Lu(Val(Combo1.ListIndex) + 1) 在状态栏显示文件路径 StatusBar1.Panels(2) = Names(Val(Combo1.ListIndex) + 1)在状态栏显示文件名ElseIf Image1.Visible = True Then Image1.Picture = LoadPicture(Combo1.Text) StatusBar1.Panels(4) = Lu(Val(Combo1.ListIndex) + 1) 在状态栏显示文件路径 StatusBar1.Panels(2) = Names(
12、Val(Combo1.ListIndex) + 1) 在状态栏显示文件名End IfEnd Sub*Private Sub Command1_Click()Image1.Top = 0: Image1.Left = 0: Image1.Height = 8000: Image1.Width = 10000Combo1.Text = 选择已添加的图片If p 0 Then p = p - 1 If Image1.Visible = False Then Picture1.Picture = ImageList1.ListImages(p + 1).Picture 切换上一张图片 StatusBa
13、r1.Panels(4) = Lu(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件路径 StatusBar1.Panels(2) = Names(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件名 Label1.Caption = 这是第: & p + 1 & 张 一共有: & ImageList1.ListImages.Count & 张图片 Else: Image1.Picture = ImageList1.ListImages(o + 1).Picture 切换上一张图片 StatusBar1.Panels
14、(4) = Lu(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件路径 StatusBar1.Panels(2) = Names(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件名 Label1.Caption = 这是第: & p + 1 & 张 一共有: & ImageList1.ListImages.Count & 张图片 End IfEnd IfIf p = 0 Then 第一张图片切换上一张后跳转至最后一张图片p = ImageList1.ListImages.CountEnd IfEnd Sub*Pri
15、vate Sub Command2_Click() 自动播放按钮Image1.Top = 0: Image1.Left = 0: Image1.Height = 8000: Image1.Width = 10000If ImageList1.ListImages.Count = 0 Then 判断当图片大于一张时自动播放 MsgBox 还未添加图片, 64, 提示ElseIf ImageList1.ListImages.Count = 1 Then If Image1.Visible = False Then Picture1.Picture = ImageList1.ListImages(1
16、).Picture Else: Image1.Picture = ImageList1.ListImages(1).Picture End If MsgBox 只有一张图片, 64, 提示ElseIf Command2.Caption = 自动播放 Then Timer2.Enabled = True Timer2.Interval = 3000 Command2.Caption = 停止播放ElseIf Command2.Caption = 停止播放 Then Timer2.Enabled = False Command2.Caption = 自动播放 Label1.Caption = 这是
17、第: & p + 1 & 张 一共有: & ImageList1.ListImages.Count & 张图片End IfEnd Sub*Private Sub Command3_Click()Image1.Top = 0: Image1.Left = 0: Image1.Height = 8000: Image1.Width = 10000Combo1.Text = 选择已添加的图片If p ImageList1.ListImages.Count Then p = p + 1 If Image1.Visible = False Then Picture1.Picture = ImageLis
18、t1.ListImages(p).Picture 切换下一张图片 StatusBar1.Panels(4) = Lu(ImageList1.ListImages(p).Index) 在状态栏显示文件路径 StatusBar1.Panels(2) = Names(ImageList1.ListImages(p).Index) 在状态栏显示文件名 Label1.Caption = 这是第: & p & 张 一共有: & ImageList1.ListImages.Count & 张图片 ElseIf Image1.Visible = True Then Image1.Picture = Image
19、List1.ListImages(p).Picture 切换下一张图片 StatusBar1.Panels(4) = Lu(ImageList1.ListImages(p).Index) 在状态栏显示文件路径 StatusBar1.Panels(2) = Names(ImageList1.ListImages(p).Index) 在状态栏显示文件名 Label1.Caption = 这是第: & p & 张 一共有: & ImageList1.ListImages.Count & 张图片 End If End IfIf p = ImageList1.ListImages.Count Then
20、最后一张跳转至第一张p = 0End IfEnd Sub*Private Sub Command4_Click() picturebox与image的切换来实现更多的功能Image1.Top = 0: Image1.Left = 0: Image1.Height = 8000: Image1.Width = 10000If Command4.Caption = 适应窗口 Then Command5.Enabled = True Command6.Enabled = True Command7.Enabled = True Command8.Enabled = True Command9.Ena
21、bled = True Command10.Enabled = True Image1.Visible = True Image1.Picture = Picture1.Picture Picture1.Picture = LoadPicture() Command4.Caption = 原图ElseIf Command4.Caption = 原图 Then Command5.Enabled = False Command6.Enabled = False Command7.Enabled = False Command8.Enabled = False Command9.Enabled =
22、False Command10.Enabled = False Picture1.Picture = Image1.Picture Image1.Visible = False Command4.Caption = 适应窗口End IfEnd Sub*Private Sub Command5_Click() 上移Image1.Top = Image1.Top - 100End Sub*Private Sub Command6_Click() 左移Image1.Left = Image1.Left - 100End Sub*Private Sub Command7_Click() 下移Image
23、1.Top = Image1.Top + 100End Sub*Private Sub Command8_Click() 右移Image1.Left = Image1.Left + 100End Sub*Private Sub Command9_Click() 缩小 Image1.Height = Image1.Height * 0.9 Image1.Width = Image1.Width * 0.9End Sub*Private Sub Command10_Click() 放大 Image1.Height = Image1.Height * 1.1 Image1.Width = Image
24、1.Width * 1.1End Sub*Private Sub Clean_Click() 初始化Combo1.ClearLabel1.Caption = Image1.Picture = LoadPicture()Picture1.Picture = LoadPicture() 清空图片框内的内容ImageList1.ListImages.Clear 清空imagelist1里面的图片Combo1.Text = 选择已经添加的图片Save.Enabled = FalseOpenPicture.Enabled = TrueStatusBar1.Panels(4) = StatusBar1.P
25、anels(2) = EndSub*Private Sub Save_Click() 图片的保存 CD1.ShowSaveIf ShowSave = vbOK Then 点确认后保存SavePicture Picture1, CD1.FileNameEnd IfEnd Sub*Private Sub EasyHelp_Click()MsgBox 简单的图片浏览器 + Chr(13) + 先添加图然后操作 + Chr(13) + 详情见帮助, 64, 软件介绍End Sub*Private Sub End_Click() 退出程序EndEnd Sub*Private Sub Help_Click
26、() 打开帮助Shell c:windowssystem32notepad.exe + readme.txt *.exe后要加空格End Sub*Private Sub OpenPicture_Click() 图片组的打开Dim i As Integera = Val(InputBox(请输入要打开的图片张数, 输入一个整数)If a = 0 Then 不输入数据点确认,或点击取消后取消GoTo Line1End IfFor i = 1 To a 对添加的图片编号,并记录文件的名称,路径CD1.ShowOpenLu(i) = CD1.FileNameIf CD1.FileName = Then
27、 如果点击取消添加后取消GoTo Line1 返回窗体End IfNames(i) = CD1.FileTitleCombo1.AddItem Lu(i) 将所选的图片加载到combo1ImageList1.ListImages.Add , , LoadPicture(Lu(i) 将所选的图片加载到imagelist1Next iPicture1.Picture = LoadPicture(Combo1.List(0) 添加后默认显示第一张图片StatusBar1.Panels(4) = Lu(1) 在状态栏显示文件路径StatusBar1.Panels(2) = Names(1) 在状态栏显
28、示文件名OpenPicture.Enabled = FalseSave.Enabled = True 添加文件后保存按钮可用Line1:End Sub*Private Sub SetTime_Click() 设定自动播放时间间隔Line2: Z = InputBox(请输入你需要的自动播放时间间隔(大于1), 请输入一个正整数)Time = Val(Z) 获取自动播放间隔时间Timer2.Interval = Time * 1000If Time = 0 Then 点击取消后默认为4秒Time = 4End IfIf Time 2 ThenMsgBox 输入错误, 48, 提示GoTo Lin
29、e2End IfEnd Sub*Private Sub Timer1_Timer()StatusBar1.Panels(5).Text = Now 在状态栏中显示现在时间End Sub*Private Sub Timer2_Timer() 图片的自动播放Image1.Top = 0: Image1.Left = 0: Image1.Height = 8000: Image1.Width = 10000If p ImageList1.ListImages.Count Then If Image1.Visible = False ThenPicture1.Picture = ImageList1.
30、ListImages(p + 1).Picture 自动切换到下一张图片StatusBar1.Panels(4) = Lu(Val(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件路径StatusBar1.Panels(2) = Names(Val(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件名 ElseIf Image1.Visible = True ThenImage1.Picture = ImageList1.ListImages(p + 1).Picture 自动切换到下一张图片StatusBar1.P
31、anels(4) = Lu(Val(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件路径StatusBar1.Panels(2) = Names(Val(ImageList1.ListImages(p + 1).Index) 在状态栏显示文件名 End If Label1.Caption = 正在自动播放.这是第: & p + 1 & 张 一共有: & ImageList1.ListImages.Count & 张图片 p = p + 1ElseIf p = ImageList1.ListImages.Count Then 播放完最后一张时,跳转至第一张
32、继续播放 q = MsgBox(播放完毕 + Chr(13) + 是否返回第一张继续播放?, 65, 提示) If q = vbOK Then p = 0 播放完最后一张时,跳转至第一张继续播放 Else: Call Command2_Click 播放结束 End IfEnd IfEnd Sub*Private Sub Tuya_Click() 将显示的图片在画图板中打开Shell c:windowssystem32mspaint.exe + StatusBar1.Panels(4).Text *.exe后要加空格End Sub5 结果分析在程序编辑完成后调试过程中出现了很多细节问题:1) 打
33、开或保存文件对话框,以及input对话框,点击取消后程序会出现错误。解决方法:通过if选择语句来判断避免与goto语句来跳过。2) 图片浏览时点击下一张(上一张)查看几张照片后再点击上一张(下一张、自动播放)时,跳至第一张图片。解决方法:运用全局变量来统一控制“上一张”、“下一张”、“自动播放”时图片切换的传递参数,使三个事件的变量一样来避免查看时跳至第一张图片的错误。3) 设置自动播放间隔时间的input对话框点击取消后程序崩溃。解决方法:使用if语句来判断所选的按钮,来选择后续执行代码。6总结经过这次的课程设计,经过对程序代码的书写与调试,我对该课程有了更深的理解。尤其是对课程的建设理念、建设思路、方法与经验,使我们对该课程的指导思想和理念有了新的体会。对面向应用的要求认识不足,强调理论,轻视上机实践的我们留下了一个深刻的映像,程序的编写不像课本知识一样死板。程序设计的思想与需要用到的知识,需要在查阅大量参考资料的情况下才能有更深的认识。启发我们的自主学习,计算机知识是无穷的,没有自主学习能力,就不会了解到很多细节的东西。这些调试的细节需要很多的,经验与总结。注重我们创新认知能力的培养,提供创新范围,