在VB中制作图标按钮的四种方法

阅读: 评论:0

2024年1月31日发(作者:)

在VB中制作图标按钮的四种方法

在VB中制作图标按钮的四种方法

2010-07-19 17:31

发信人: huanghm (东方不败), 信区: Program

标 题: VB 中图标按钮的制作

发信站: 深大荔园晨风站 (Tue Jan 13 11:11:08 1998), 转信

现在大多数Windows应用程序的功能都比较丰富,相应的菜单结

构也比较复杂。一些操作命令往往要打开好几层菜单。尤其是一些

常用的操作命令,因其使用较频繁,即使仅打开一层菜单,从中选择

一项也是比较麻烦的。因此现在绝大多数Windows应用程序中除了菜

单之外,还配备了工具栏。工具栏中有与常用菜单命令相对应的按

钮,按这些按钮的效果和选择菜单命令的效果完全一样。工具栏中

的按钮和普通按钮不同的是,它们不用文本字符串,而是用图标来

标明按钮的功能。这种图标按钮的好处是省地方,菜单命令往往比

较冗长,而工具栏提供的空间又十分有限。使用图标按钮最大的好

处还在于其直观形象性,这与Windows图形用户界面(GUI)方便用

户、简化操作的目标是一致的。

Windows系统提供的标准按钮(如OK、Cancel等)中只能显示文本

字符串。在VisualBasic(以下简称为VB)中,按钮是使用工具箱中的命

令按钮控件CommandButton来实现的。CommandButton使用的是Windows系

统提供的标准按钮控件,因而无法装入图标。下面介绍在VB中实现

图标按钮的几种方法。

一、使用标准控件实现图标按钮

VB的标准控件中,能够装入图形的只有Image(图像)

和PictureBox(图片框)两种。Image的功能较简单,占用系统资源较

少。PictureBox的功能很丰富,可以将它看作是Image的一个“超集”,

它占用的系统资源当然就要多一些。为了利用可装入图形的控件模

拟图标按钮的功能,首先应比较一下它们各自所能够接收到的事

件(如表1所示)。

表1中打勾(√)的表示该控件提供了相应的事件驱动过程接口,

打叉(×)的则表示该控件没有提供,控件不接收相应的事件。因为

是要模拟CommandButton的功能,所以Image和PictureBox的其它事件没有

列出。

CommandButton的事件ImagePictureBox

Click√√

DragDrop√√

KeyDown×√

KeyPress×√

KeyUp×√

LostFocus×√

MouseDown√√

MouseMove√√

MouseUp√√

表1Image和PictureBox与CommandButton中相同的事件

从表1中可以看出,PictureBox具有CommandButton中所有事件的接

口,因而可以完全模拟CommandButton的功能。CommandButton的某些事

件在Image中接收不到。对于一般应用来说,我们往往只

对CommandButton的Click事件过程编程,因此Image也可以用于模

拟CommandButton,而且能够满足大多数应用的需要。注意,在没有配

备鼠标的系统中,因为只能使用键盘作为输入设备,而Image又没有

键盘事件的接口,这时就只能用PictureBox了。

VB安装到硬盘上之后,在VB目录下提供了丰富的图形库。其中包

括位图(Bitmap,在BITMAPS子目录下)、图标(Icon,在ICONS子目录

下)和图元(Metafile,在METAFILE子目录下)。每种图形又按类分别

存储在不同的子目录下。在图标按钮的制作中,我们可以使

用BITMAPSTOOLBAR3子目录下的位图。该目录中存储了常用工具栏

中的按钮的位图,每种按钮一般有三个位图文件,分别对应按钮在

松开、按下和无效时的状态。例如,、

和分别对应剪切(cut)按钮在松开、按下和无效时的状

态。因此,我们可让按钮在松开时装入*-,按下时装

入*-,按钮无效时装入*-。可以编写如下的相应事件

过程代码(以PictureBox实现的剪切按钮为例):

SubPicture1_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAs

Single)

e=LoadPicture("C:")

'按下鼠标按钮时,装入按钮被按下时的位图

EndSub

SubPicture1_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAs

Single)

e=LoadPicture("C:")

'松开鼠标按钮时,装入按钮被松开时的位图

EndSub

SubPicture1_Click()

'此处插入单击按钮时的处理代码

EndSub

如果需要设置按钮的无效状态,则可使用如下语句:

d=False

e=LoadPicture("C:")

'装入按钮无效时的位图

当按钮恢复为有效时,再使用下列语句:

d=True

e=LoadPicture("C:")

'装入按钮松开时的位图

这样,我们就实现了用PictureBox模拟图标按钮。用Image模拟图标

按钮的方法与此完全相同。在程序中,一般用一个PictureBox作为工具

条,这里的PictureBox作为容器(container)控件,在PictureBox中再加入各

个图标按钮。这在多文档界面(MDI)中的主窗体MDIForm上尤其有必

要,因为普通控件不能直接加入到MDIForm中,只有具备Align属性

的PictureBox才能加入到MDIForm。

二、使用扩充控件实现图标按钮

VB的扩充控件中有几种能直接支持图标的按钮。下面仅介绍其

中的三种扩充按钮,即3D命令钮(3DCommandButton)、3D组按钮(3D

GroupPushButton)和动画按钮(AnimatedButton)。使用这三种控件制

作图标按钮比起使用PictureBox或Image模拟的图标按钮要方便得多。在

下面的介绍中,会给出每种控件对应的文件名和控件的对象类型,

如果在工具箱中找不到该控件,则在VB的菜单命令弹出的

对话框中双击与该控件对应的文件名(一般在Windows的SYSTEM目录

下),即可将该控件加入到工具箱中。

对于扩充控件接口的特性(属性、事件和方法),我们仅介绍其

扩充的部分,与标准控件相同的其它接口则不再赘述。

1、3DCommandButton

文件名为,对象类型为SSCommand,属性如表2所示。

表2

属性数据类型定义

AutoSizeInteger0--(缺省状态)不调整尺寸;

1--把装入的图片尺寸调整为按钮的大小。如果装入的图片是

一个图标(Icon)或按钮本身有标题,则该值不起作用;

2--把按钮的尺寸调整为装入图片的大小。如果按钮本身有标

题,则该值不起作用。

BevelWidthInteger按钮周围斜角的宽度,取值范围为0~10,缺省值

为2。

Font3DInteger设置标题的立体显示效果:

0--(缺省状态)无立体效果;

1--略微凸出;

2--强烈凸出;

3--略微凹进;

4--强烈凹进。

OutlineInteger确定有无边框,取值为True(缺省状态)或False。

PictureInteger位图或图标,不能是图元。

RoundedCornersInteger按钮是否为圆角,取值为True(缺省状态)

或False。

3DCommandButton的属性

3DCommandButton是一个本身具有Picture属性的按钮,用它可装入

一个图片,同时它还具有按钮的功能。3DCommandButton不能接

收MouseDown和MouseUp之类的鼠标事件,因此不能像PictureBox那样通

过装入不同的图片来显示按钮被按下和松开的状态。3DCommand

Button之所以被称为“3D”,是因为它本身能够处理按钮按动时的三

维视觉效果。用3DCommandButton制作图标按钮时,只需装入一个按钮

松开时的图片(例如,)即可,其余的无需用户操心。

2、3DGroupPushButton

文件名为,对象类型为SSRibbon,属性如表3所示。

属性数据类型定义

AutoSizeInteger0——(缺省状态)不调整尺寸;1——把装入的图片

尺寸调整为按钮的大小;2——把按钮的尺寸调整为装入图片的大

小。

BevelWidthInteger按钮周围斜角的宽度,取值范围为0~2(缺省状

态)。

GroupAllowAllUpInteger是否允许同组内的所有按钮都处于松开的状

态。取值为True(缺省状态)或False。当设置组中一个按钮

的GroupAllowAllUp属性值时,本组其它按钮的GroupAllowAllUp属性也被

自动设置为相同的值。

GroupNumberInteger组号。取值为:0——不属于任何组,可由用户

或程序代码任意开关;1(缺省状态)~99--按钮属于该组号定义的

逻辑组。若在处于同一逻辑组的所有按钮中按下某个按钮时,则另

外处于按下状态的按钮会被自动松开。

OutlineInteger同3DCommandButton。

PictureDisabledInteger按钮被禁止(Enabled属性为False)时的位图。

PictureDnInteger按钮被按下时的位图。

PictureDnChangeInteger如果没有指定PictureDn,如何由PictureUp变换

出PictureDn:0——PictureUp不变;1——(缺省状态)抖动PictureUp。

把PictureUp位图中与BackColor颜色相同的点每隔一个变成白色,这样就

产生了将该颜色加亮的效果;2——将PictureUp位图取反。

PictureUpInteger按钮松开时的位图。

RoundedCornersInteger同3DCommandButton。

3DGroupPushButton的属性要比3DCommandButton丰富些,一旦我们

在设计阶段把按钮各种状态时的位图加载好,在程序中就可不必理

会它了。如果图形库中只有按钮松开时的位图,没有按钮按下时的

位图,则还可以利用PictureDnChange属性来加以弥补。3DGroupPush

Button的另一个引人注目的特性是它能够对多个按钮进行逻辑分组和

自动控制,这一点无疑在实际应用中增添了更多的功能和更大的灵

活性。

3DGroupPushButton是自锁式的,即按动后保持按下状态,而不是

随鼠标键的松开而弹起。要想让按钮重新弹起,还需再按一次,这同

录音机上的暂停键相似。如果要让3DGroupPushButton表现得和普通按

钮一样,随鼠标键的松开而弹起,则需对Click事件进行编程。3DGroup

PushButton的Click事件过程与普通按钮稍有不同,其中增加了一个整

型参数Value:

SubGroupPush3D_Click(ValueAsInteger)

Value可取值为True或False,分别代表按钮的状态是按下还是松

开,3DGroupPushButton的Value属性与此相对应。若在Click事件过程中

加入语句:=False,则可让3DGroupPushButton表现得

和普通按钮一样,随鼠标键的松开而弹起。

3、AnimatedButton

文件名为,对象类型为AniPushButton,属性如表4所

示。

属性数据类型定义

CCBfileLoadString调出文件中存储的图像和按钮属性信息。

CCBfileSaveString把图像和按钮属性信息存入文件。

ClearFirstInteger确定按钮切换到下一帧前是否清掉前一帧,取值

为True或False。

ClickFilterInteger确定按钮的哪部分能检测到鼠标单击:0--(缺省

状态)按钮的任何部位都能检测到鼠标单击;1--鼠标单击必须位

于标题文本上或图像框中才能被检测到;2--鼠标单击必须位于实

际的图像框中才能被检测到;3--鼠标单击必须位于标题文本上才

能被检测到。

CycleInteger控制动画的播放周期:0--(缺省状态)用户按动按

钮时播放动画的前半部分,按钮松开时播放后半部分,最后回到第

一帧;1--松开按钮时跳到下一帧,同时把Value属性值加1。如果按

钮处于最后一帧,单击时则跳回第一帧。这是每次播放一帧的多态

按钮;2--第一次单击按钮时,播放动画的前半部分,同时把Value属

性值从1变为2;再次单击按钮时,播放后半部分,按钮回到第一帧,

同时把Value属性从2变回1。因此,这是一种二态按钮。

FrameInteger设置当前帧。

HideFocusBoxInteger是否隐藏表示输入焦点的虚线框,取值为True

或False(缺省状态)。

PictDrawModeInteger设置图像(位图或图标)在按钮中的绘画方式

:0--(缺省状态)用PictureXpos和PictureYpos属性值确定图像的位

置,用TextPosition属性控制标题的位置。这些属性用0~100的标尺来控

制X和Y的位置;1--自动控制尺寸模式,按钮尺寸调整到能放下最

大图像或标题;2--调整图像的尺寸,扩展或压缩图像框以适应按

钮的尺寸。这时标题(如果有的话)总是显示在按钮的顶部(好

像Text-Position属性为0一样)。

PictureInteger同Form、PictureBox等。

PictureXposInteger控制按钮中图像的水平位置,取值为0~100。

PictureYposInteger控制按钮中图像的垂直位置,取值为0~100。

SpecialOpInteger触发一个特殊操作,当该属性取某个值时,该操作

被触发。取值为:1--模拟单击;其它值--无效。

SpeedInteger设置间的延迟时间(毫秒)。取值范围为0(缺省状

态)~32767。

TextPositionInteger确定标题的位置,同时也会影响图像的位置。取

值为:0--(缺省状态)标题位置由TextXpos和TextYpos确定,图像位

置由PictDrawMode、PictureXpos和PictureYpos确定;1--图像在左边,标

题在右边,标题的垂直坐标由TextYpos确定;2--图像在右边,标题

在左边,标题的垂直坐标由Text-Ypos确定;3--图像在下边,标题在

上边,标题的水平坐标由TextXpos确定;4--图像在上边,标题在下

边,标题的水平坐标由TextXpos确定。

TextXposInteger确定标题的水平位置。

TextYposInteger确定标题的垂直位置。

ValueInteger指示二态或多态按钮的状态。

与3DCommandButton和3DGroupPushButton相比,AnimatedButton要复

杂得多。当然,AnimatedButton提供的功能也要多得多。首先,Animated

Button可以存储多幅画面并以动画的形式连续播放,当然这对于我们

实现工具栏中的二态(按下和松开)图标按钮是绰绰有余了。其

次,AnimatedButton可以让标题和图像共存而互不影响,不像3D

CommandButton中标题与图像会相互重叠,结果一个也看不清。3D

GroupPushButton中则根本没有提供标题属性。另外,AnimatedButton还

允许我们定义鼠标单击的有效范围,这也是非常好的一项功能扩

充。

三、结束语

以上我们介绍了在VB中制作图标按钮的四种方法。其中以使

用PictureBox或Image模拟的方法最为常见(VB提供的多文档界面的示例

程序中用的就是这种方法),而后三种

分别使用扩充控件3DCommandButton、3DGroupPushButton或Animated

Button实现图标按钮的方法则很少见到。但后三种扩充控件是专门开

发的,因而使用起来更方便些,特别是当每种扩充控件均有其独到

的特性和功能时尤其如此。

--

※ 来源:.深大荔园晨风站 .[FROM: 202.192.140.151]

/?path=%2Fgroups%2FGROUP_2%2FProgram%2Fvb%2FM.88

在VB中制作图标按钮的四种方法

本文发布于:2024-01-31 23:08:20,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170671370032053.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:按钮   控件   图标   属性   图像   标题   状态
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23