说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用VB做个漂亮的进度条

HTML文档下载 WORD文档下载 PDF文档下载
用VB做个漂亮的进度条

  一切都在变,就连进度条这个小东西也在发生着变化,由以往的单色形式变成了现今更加亮丽的过渡色形式甚至更为复杂漂亮的形式,给软件也增添了不少色彩。我在这里要告诉各位制作一种非常简便实用的制作方法:
  一、实现原理
  采用一个完整的图片来作为进度条,每次当进度条改变时,采用先贴图再用背景色擦去不需显示的一段进度的方法来实现进度条的变化,可实现制作任何复杂美观的进度条。
  二、准备工作
  首先需准备一个如下图样式的进度条图片(当然你可以做你自己喜欢的样式)。然后在窗体中加入一PictureBox控件,属性设置如下:
AutoSize:True
Appearance:Falt
AutoRedraw:True
ScaleMode: Pixel
Picture:″准备的图片″
  再加一辅助控件(只用于保存图片,方便快捷地使用进度条)Image,属性设置如下:
  Picture:″准备的图片″
  Visible:FALSE
  说明:本文所讲的进度条并不是狭义上那种安装程序中常见的仅表示一个事件进程的进度条,而是把那些条形的,表示一个量的大小的图示统称为进度条。以此概念为基础让我们先来看看它的一些用途和类别,然后给出各类进度条的实现。
  进度条的用途:
  ※在一般软件中表示执行进度
  ※在多媒体播放器中表示音量大小、频率节奏的变化…
  ※在游戏中表示角色的能量、生命值…
  进度条的分类:
  由以上用途可知,进度条大体可分为两类
  第一类:自动变化的进度条(如安装程序中的进度条)
  第二类:可由用户操作的进度条(如音量调节)
  以下是两类进度条的代码。
  实现第一类的方法:
  Const MaxValue = 100
  Const MinValue = 0
  Dim Gene As Single
  Dim ProValue As Single
  Sub InitData()
  Gene = Picture1.ScaleWidth / (MaxValue - MinValue)
  End Sub
  Sub SetProBar(value As Single)
  Dim X As Single
  ProValue = value
  If ProValue > MaxValue Then
  ProValue = MaxValue
  Else
  If ProValue < MinValue Then
  ProValue = MinValue
  End If
  End If
  Text1.Text = ProValue
  X = (ProValue - MinValue) * Gene
  With Picture1
  Picture1.Picture = Image1.Picture
  Picture1.Line (X, 0)-(.ScaleWidth, .ScaleHeight), vbWhite, BF
  End With
  End Sub
  以上是实现第一类进度条的全部代码,它有相当的独立性,不管你准备的进度条有多长,此代码都可无须改变而应用于你的系统中。其中,MAXVALUE、MINVALUE为此进度条所表示的最大最小值,可由实际应用而定。
  PROVALUE 为当前的进度值,可由它得到当前值,以便处理。
  SETPROBAR 为实际使用的过程,在软件中通过调用此过程来改变进度条的长度。VALUE 的取值为 MINVALUE~MAXVALUEINITDATA 是初始化进度条长度和实际要表示的范围的比例因子,在软件中首先要调用此过程完成初始化工作。
  第二类实现方法:
  要实现此类进度条,只需在第一类的基础上再加上响应用户操作的部分即可
  具体所加代码如下:
  Private Sub picture1_MouseMove(Button As Integer, Shift As Integer, X As Single,Y As Single)
  If Button = 1 Then
  Picture1_MouseDown Button, Shift, X, Y
  End If
  End Sub
  Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single,Y As Single)
  If Button = 1 Then
  ProValue = Int(X / Gene + MinValue + 1)
  SetProBar ProValue
  End If
  End Sub
  应用示例:
  建一工程,然后加入下列控件,并写入所示代码即可。
  控件:两个PictureBox,组成控件数组(属性设置如上)但:picture1(0)的BorderStyle:None
  两个Label,组成控件数组并分别以与自已Index 值相同的PictureBox为父控件(只需把Label绘在或粘贴在相应的PictureBox上即可)属性:
  AutoSize:True
  Alignment:Center
  BackStyle:Transparent
  Label(1): Caption:″当前音量0″
  Enabled:False
  Label(0): Caption:″0%″
  一个Timer:属性:Interval:50
  三、实例
  一个自动的进度条和由用户控制的进度条。
  Option Explicit
  ′如果有多个进度条且表示值的范围不同
  ′则可设立一组范围值,最好能通过INDEX
  ′值同自已的进度条建立对应关系,以方便处理
  Const MaxValue = 100
  Const MinValue = 0
  Dim Gene As Single
  Dim ProValue(1) As Single
  ′生成比例因子,必须首先执行
  Sub InitData()
  Gene = Picture1(0).ScaleWidth /
(MaxValue - MinValue)
  End Sub
  ′根据当前进度值设置进度条,INDEX指出是哪个进度条的值
  Sub SetProBar(value As Single, Index As Integer)
  Dim X As Single
  Dim BkColor As Long
  ProValue(Index) = value
  ′对当前进度值超出范围的处理
  If ProValue(Index) > MaxValue Then
  ProValue(Index) = MaxValue
  Else
  If ProValue(Index) < MinValue Then
  ProValue(Index) = MinValue
  End If
  End If
  ′在存在多个进度条时分别设置各进度条的不同文本
  Select Case Index
  Case 1
  Label1(Index).Caption = ProValue(Index) & ″%″
  Case 0
  Label1(Index).Caption = ″当前音量″ & ProValue(Index)
  End Select
  ′计算出当前进度值所对应的进度条位置
  X = (ProValue(Index) - MinValue) * Gene
  With Picture1(Index).Picture = Image1.Picture
  ′把当前进度值所对应的进度条位置之后的图片用白色盖住
  ′它是此法实现思路的核心
  Select Case Index
  Case 1
  bkcolor = vbWhite
  Case 0
  bkcolor = vbMenuBar
  End Select
  Picture1(Index).Line (X, 0)-(.ScaleWidth, _ .ScaleHeight), bkcolor, BF
  End With
  End Sub
  ′首先初始化比例因子
  Private Sub Form_Load()
  InitData
  End Sub
  ′在用户操作INDEX为0的进度条时的响应
  Private Sub picture1_MouseMove(Index As Integer, _
   Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 And Index = 0 Then
  Picture1_MouseDown Index, Button, Shift, X, Y
  End If
  End Sub
  ′根据当前鼠标坐标的X值(进度条若为纵向则使用Y值)
  ′计算出所对应的当前进度值,然后设置进度条
  Private Sub Picture1_MouseDown(Index As Integer, _
   Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 And Index = 0 Then
  ProValue(Index) = Int(X / Gene + MinValue + 1)
  SetProBar ProValue(Index), Index
  End If
  End Sub
  ′在演示中以定时器定时设置进度
  ′实际使用时当然是按事件完成的
  ′百分比来设置进度
  Private Sub Timer1_Timer()
  Static curval As Single
  SetProBar curval, 1
  curval = (curval + 1) Mod MaxValue
  If curval = 0 Then
  curval = MinValue
  End If
  End Sub
(河南 李捷)

显示密码编辑框中的密码-Delphi资料 写小执行程序-Delphi资料 隐藏和显示Windows的任务条-Delphi资料 隐藏桌面上的图标-Delphi资料 用DELPHI编制Windows95下的钩子函数 用Delphi的THML控件实现触摸屏的使用 用Delphi实现禁止用户关闭Window9X 用Delphi制作能够干净地删除自己的程序 用DELPHI 做一个简单的屏幕保护程序 用Enter键代替Tab键-Delphi资料 用修改文件时间的方法来加密文件-Delphi资料 用最原始的方法编制程序-Delphi资料 运用Delphi编写Windows NT中服务程序 在DELPHI编程中确定系统运行模式 在Delphi程序中调用控制面板设置功能 在DELPHI下读取与设置系统时钟 在Delphi中避免2000年问题的捷径 在Delphi中调用API函数 在Delphi中获取和修改文件的时间 在Delphi中控制扫描仪 在Delphi中实现对WIN9X应用程序使用权限的设置 在Delphi中实现对目录拷贝、删除和搬移的操作 在Delphi中使用自定义光标 在Delphi中用拼音首字符序列来实现检索功能。 在DELPHI中用线程排序 在Delphi中制作背景音乐 在Dephi中使用TStream读写数据的技巧-Delphi资料 在应用程序中跟踪MOUSE的坐标-Delphi资料 怎样建立回调函数-Delphi资料 怎样显示自定义鼠标光标(Cursor)-Delphi资料 找出消失的 Delphi 窗口 关于datagrid里删除的问题 天下第一黑客 如何开发手机短信程序? 中秋佳节又加了一个角,双喜---------散分! 有没有将一个数组中重复的值删除的Function? 中秋大送分,祝大家节日快乐,心想事成!! 想用ADO的如下两个变量,需要做哪些预操作,设置或Include等,我怎么用不了 用了query界面好像死了一样 怎样给自定制的Web控件添加事件(分全给了) Apache+php我老是配置不成功,请教各位大哥,能不能将一份Apache+PHP配置资料贴出来(曾今配置成功),详情如下。 中秋大送分,祝大家节日快乐,心想事成!! VS.net 打开htm页面时报错,导致VS关闭,重装VS.net2002也不行。 请问hibernate中,用query.list()和用session.find(query)有什么不同呢? 准备贩卖人参去了? 人生在世 how many? 何必苦苦 study? 有了MM go to see..其累无比也happy..... 公司局域网其中一台机访问不到另一台机,help 歪诗一首表心意 Apache+php我老是配置不成功,请教各位大哥,能不能将一份Apache+PHP配置资料贴出来(曾今配置成功),详情如下。 ocx中字符参数应如何设置 如何用javascript设置或取得<asp:textbox .../>的值? 使用dbexpress连接mysql问题! 关于 SQL Server 查询遇到的问题。 高分请教:怎样得到PB函数对象的地址? 超链接列的数据绑定问题. datagrid和sql,在线等待 在北京想要参加oracle的培训,时间最好在一周!请给个推荐! 如何把一个aspx页面作为两个页面来用? 帮帮忙:显示窗口变化导致显示物体变形问题 为什么订阅成功了而它的状态是失败或从未启动???请高手帮忙!!! 怎样判断字符串中有半个中文字符? 如何将ClientDataSet.Delta置空? js文件是什么? 如何在hibernate中一次提交删除多条记录? *.mdf壞了,應如何恢復? 怎么读去一个数据库中的所有表的名称 请教一个文件上传的问题! 急!!VS.NET的MSDN突然看不了(绝大部分),报IE找不到服务器错误!!! ----怎么在程序打包后创建一个卸载的快捷方式? java 做的记事本中如何加打印功能 打造功能最强,代码风格最标准的留言簿,欢迎挑刺. 问个关于结贴的问题 如何在Tcl脚本里执行Tk命令? C#下如何做饼图,曲线和柱图 装了VS.NET不知道怎样新建一个ASP.NET文件,请指点 请大家帮忙给我一些asp.net设计框架的资料? 要光盘一打开就能打开一个IE 中秋大送分,祝大家节日快乐,心想事成!! 中秋大送分,祝大家节日快乐,心想事成!! 用ADO可以连上数据仓库MSOLAP,可查询出来的数据不对呀,什么控件支持数据仓库?请高手指教! 中秋大送分,祝大家节日快乐,心想事成!! 如何在Tcl脚本里执行Tk命令? 人最高从多高的地方跳下来不会死(没有任何保护措施的那种,在地球上) 作文非原创的(抄请在没什么人看、没有人浏览的地方复制)初一水平,600字左右 请问东汉24将领是哪里啊? 请问什么情况下用硬线连接?什么情况下用软线连接? 什么情况下不加弹簧垫片 猛将,瓦斯,co2都是什么区别 巢许在嵩颍, 们普哦唐 3Q理解它 东汉末年山东有哪些著名将军? F1赛车,软胎 硬胎,哪个快?各有什么优势? F1 硬胎 软胎 超软胎如何区分?各有何特性?好像还有雨胎,反正F1里的轮胎都帮我分析遍, 卜拉希米访叙将劝反对派统一组团参加日暴风袭击西欧大部致德国七人死亡 英法以色列将释放第二批26名在押巴勒斯坦印媒:印度调整中国战略因不喜欢给中国英首相:媒体爆料美监听丑闻是“资敌”韩国向美国求证是否监听朴槿惠 美方尚12岁黑客入侵加拿大政府网站 辩称仅《纽约时报》著名专栏作家托马斯:上海被控杀死杰克逊者出狱 称为谋生计想当圣马力诺执政官会见王毅王毅同圣马力诺外长瓦伦蒂尼会谈城隍庙内小吃城确定关门最文艺:《后会无期》未来三年基本无望入读问鼎上半年超额收益榜导视(7月11日)民警半夜找主人众筹汇聚“无汗男孩”生命的希望浙江丽水:女子因男友看世界杯受冷落 你的“小电驴”是“马路杀手”吗临安供电公司13.9万台电能表有了“转变理念塑造阳光心态重生之回到十年前玄天战圣冰变传说都市三宫情癫医圣大晋之皇回到五代末横行三国之冷血武圣小资三国少年屠黑客记事本望天鹅旅游天涯石旅游瑞丽独树成林旅游热海大滚锅旅游背来石旅游天目湖旅游天脊龙门旅游井冈山革命博物馆旅游峨眉山瑜珈温泉旅游海师洞旅游长清马山旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘