ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 33695|回复: 40

[分享]放置图片的好地方——ImageList控件介绍

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-4-17 21:24 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:控件

引言:在“控件工具箱”中列出了常用的内部控件,但Windows中也有一些控件,较常用,且可以很好地扩充用户界面。下面介绍其中的一些,首先介绍ImageList控件。

ImageList控件介绍

分类:ExcelVBA>>控件的使用>>ImageList控件

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-17 21:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
1 ImageList控件简介
ImageList 控件是包含 ListImage 对象的集合,可以通过索引(index)或者关键字(key)引用该集合中的每个对象。ImageList 控件不能独立使用,只作为一个向其它控件提供图象的资料中心。
ImageList 控件的作用像图像的储藏室,同时,它需要第二个控件显示所储存的图像。第二个控件可以是任何能显示图像Picture对象的控件,也可以是特别设计的、用于绑定 ImageList控件的Windows通用控件之一。这些控件包括ListView、ToolBar、TabStrip、Header、ImageCombo、和TreeView控件。为了与这些控件一同使用ImageList,必须通过一个适当的属性将特定的ImageList控件绑定到第二个控件。对于ListView控件,必须设置其Icons和SmallIcons属性为ImageList控件。对于TreeView、TabStrip、ImageCombo、和Toolbar控件,必须设置ImageList属性为ImageList控件。
一旦ImageList与某个Windows通用控件相关联,就可以在过程中用Index属性或Key属性的值来引用ListImage对象。
可以用Add方法给ListImages集合添加图象。然后Windows 通用控件可以用ImageList属性指定一个ImageList控件。
当与Windows通用控件一起使用ImageList控件时,在将它绑定到第二个控件之前,按照希望的顺序将全部需要的图像插入到ImageList。一旦ImageList被绑定到第二个控件 ,就不能再删除图像了,并且也不能将图像插入到ListImages集合中间。但是可以在集合的末尾添加图像。
要与其它控件(不能绑定到ImageList控件的控件)一起使用ImageList控件,将第二个控件的Picture属性赋值给ImageList控件中的任何一个图像的Picture对象。注意 将图像赋值给Picture对象时,必须使用Set语句。
可以插入任何大小的图像到ImageList控件中。然而,由第二个控件显示的图像大小是由一个因素决定的:第二个控件是否也是一个绑定到ImageList控件的Windows通用控件。当 ImageList控件被绑定到另一个Windows通用控件时,不同大小的图片可以被添加到控件中,但是在关联的Windows通用控件中显示的图象大小将受到添加到ImageList图像中的第一个图象大小的约束。例如,如果您添加一个16×16像素的图像到ImageList控件中,然后将ImageList绑定到TreeView控件(用Node对象显示),所有存储于ImageList控件中的图像将以16×16像素显示,即使它们的尺寸是更大或更小。此外,如果您用Picture对象显示图像,则存储在ImageList控件中的任何图像都将以图像最初的大小显示,无论它的尺寸是更大还是更小。
注意,ImageList控件是ActiveX控件组的一部分,该控件组可以在文件MSCOMCTL.OCX中找到。若是在应用程序中使用ImageList控件,必须把文件MSCOMCTL.OCX添加到工程中。文件MSCOMCTL.OCX应安装到Microsoft Windows的System目录或者System32目录下。
[此贴子已经被作者于2007-4-17 21:28:14编辑过]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-17 21:25 | 显示全部楼层
2 在VBA中使用ImageList控件
ImageList控件包含了一个图像的集合(ListImage对象的ListImages集合),这些图像可以被其它Windows公共控件使用,特别是ListView、TreeView、TabStrip和Toolbar控件。例如,在Toolbar控件的按钮上显示的所有图像都可以用ImageList控件存储。
如果某个控件将Picture对象分配给它的Picture属性,那么这样的控件就可以和ImageList控件一起使用,例如PictureBox、Image和CommandButton控件。
将ImageList控件作为一个单一的存储库可以节约开发的时间,因为这样可以使编写的代码引用单一和一致的图像目录。不用再编写代码加载位图或图标(使用LoadPicture函数),现在只需要充填一次ImageList,分配需要的Key值,并编写使用Key或Index属性的代码来引用图像。
控件可以使用ListImage对象集合中的位图(.bmp)、光标(.cur)、图标(.ico)、JPEG(.jpg)或GIF(.gif)文件。可以在设计时或运行时添加或删除图像。ListImage对象具有标准的集合对象属性:Key和Index。它还具有标准的方法,例如Add、Remove和Clear。
最后,控件提供了Overlay、Draw和ExtractIcon方法,利用这些方法可以创建组合的图像、在具有hDC属性的对象(如Form和Printer对象)上画图,以及用存储在控件中的位图创建图标。  
使用ImageList控件可以存储表示打开文件夹、关闭文件夹和文档的图像。这些图像可以动态地分配给TreeView控件的Node对象,以便在节点展开或折叠时表示它的不同状态,或者表示节点是文档还是文件夹。也可以存储表示一般计算机操作,例如保存、打开以及打印文件的图像。这样就可以将这些图像分配给应用程序中Toolbar控件上的Button对象。还可以存储表示拖放操作的图像,例如MousePointer图标和DragIcons。
[此贴子已经被作者于2007-4-17 21:28:51编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-17 21:25 | 显示全部楼层
3 ImageList控件使用示例
3.1 准备工作
在使用控件ImageList控件前,先应在“控件工具箱”中添加下面的控件:
Microsoft ImageList Control,version 6.0
Microsoft TreeView Control,version 6.0
在“控件工具箱”中单击右键,选择“附加控件”,弹出如图1所示所示的“附加控件”对话框,在该对话框中选中上面的两个控件。
 图1:附加控件
此时,在“控件工具箱”中应该新增加了名为“ImageList”和“TreeView”的两个控件,如图2所示。
  图2:新添加的两个控件
[此贴子已经被作者于2007-4-17 21:30:30编辑过]
VWyX6kpM.jpg
ynumQln8.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-17 21:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

3.2 示例一:添加ListImage对象的方法(一)
可以结合LoadPicture函数一起使用ListImages集合的Add方法来添加ListImage对象。
在VBE编辑器中,插入一个用户窗体,在窗体上放置一个ImageList控件和TreeView控件。如图3所示,然后在用户窗体代码窗口输入下面的代码:
  图3:添加ListImage对象
Private Sub UserForm_Initialize()
  Dim imlImages As New ImageList

  '决定图像的大小
  imlImages.ImageWidth = 16
  imlImages.ImageHeight = 16

  '添加图像
  imlImages.ListImages. _
  Add , "jz", LoadPicture(ThisWorkbook.Path & "\1.ico")

  '将ImageList控件绑定到TreeView控件中
  Set TreeView1.ImageList = imlImages

  '为TreeView控件的Node对象赋一个图像,该图像的Key值是"jz"
  TreeView1.Nodes.Add , , , "根文件夹", "jz"
End Sub
上面的示例当窗体初始化时,加载名为imlImages的ImageList控件和一个图标,然后将图标添加到TreeView中。在该过程中,使用了ImageWidth属性和ImageHeight属性来改变图标的大小,也可以在控件的“属性”对话框中输入想要的尺寸值来设置图像的大小。注意,只有当ImageList中不包含图像时才能这么做。在控件中包含了图像后,试图改变图像的尺寸将导致错误。
按F5键运行,结果如图4所示。
  图4:添加ListImage对象结果


[此贴子已经被作者于2007-4-17 21:32:19编辑过]
Uz33AXcE.jpg
oxNvUV8g.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-17 21:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

3.3 示例二:添加ListImage对象的方法(二)
也可以先将图像放置在一个工作表中,然后再利用OLEObject对象的属性将其添加到ImageList控件中。下面举例说明。
先将一个图像放置在工作表Sheet1的单元格A1中,如图5所示。
 
图5:将一个图像放置在工作表单元格中,以便ImageList控件加载
在VBE编辑器中添加一个用户窗体,并放置一个ImageList控件和一个TreeView控件,如图3所示。
在用户窗体代码窗口输入下面的代码:
Private Sub UserForm_Initialize()
  Dim imlImages As New ImageList

  '决定图像的大小
  imlImages.ImageWidth = 16
  imlImages.ImageHeight = 16

  '添加图像
  imlImages.ListImages.Add _
     Key:="mouse", _
     Picture:=Sheet1.OLEObjects("image1").Object.Picture

  ‘过滤图片背景色
  imlImages.MaskColor = RGB(0, 0, 0)
       
  '将ImageList控件绑定到TreeView控件中
  Set TreeView1.ImageList = imlImages
       
  '为TreeView控件的Node对象赋一个图像,该图像的Key值是"mouse"
  TreeView1.Nodes.Add , , , "根文件夹", "mouse"
End Sub
按F5键运行上面的代码,看看结果如何。上面的示例也说明了MaskColor属性的用法,该必性过滤图片的背景色,即所指定的颜色将变为透明。

[此贴子已经被作者于2007-4-17 21:34:09编辑过]
vjfAq4g0.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-17 21:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

3.4 示例三:创建组合图像
可以使用ImageList控件来创建组合图像(图片对象),这个组合图像是由两个图像通过使用   Overlay方法合成的。当然也可以使用MaskColor属性来过滤纸掉一些颜色。
Overlay方法需要两个参数。第一个参数指定了下面的图像;第二个参数指定了覆盖在第一个图像上的图像。两个参数都可以是ListImage对象的Index或Key属性。下面举例说明创建组合图像。
首先,在VBE窗口中添加一个用户窗体,在窗体上放置三个“图像”控件、三个“命令按钮”控件和一个ImageList控件,如图6所示。
JhYvjzW2.rar (131.47 KB, 下载次数: 1111)


[此贴子已经被作者于2007-4-17 21:36:41编辑过]
DvoxWodQ.jpg
YFFUsYmk.jpg

TA的精华主题

TA的得分主题

发表于 2007-4-17 21:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-4-17 21:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-4-17 21:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 01:08 , Processed in 0.043025 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表