一、 基础知识
涉及TListBox自定义重绘的属性和事件:
属性:
Style: 取值为lbStandard(标准风格),lbOwnerDrawFixed(所有者固定绘制风格),lbOwnerDrawVariable(所有者可变绘制风格)
说明:
1. 当Style = lbStandard时,使用控件默认的绘制风格。
2. 当Style = lbOwnerDrawFixed时,用户只能在控件默认大小的区域绘图。
3. 当Style = lbOwnerDrawVariable时,用户可改变控件默认的绘图区域大小并决定如何绘图。
事件:
OnMeasureItem:当Style = lbOwnerDrawVariable时计算TListBox中某项的高度时调用。
OnDrawItem :当Style = lbOwnerDrawVariable时由用户例程确定如何绘制TlistItem。
由此,可以看出,要实现定制界面风格的TListBox,首先,需要设置TlistBox的Style 属性为lbOwnerDrawVariable,其次,需要写自定义的重绘事件。
二、 特殊效果的实现
在窗体(Form1)上放置5个ListBox,名称分别为 ListBox1……ListBox5,将所有ListBox的Style属性设置为lbOwnerDrawVariable;在Form1上添加两个 TImageList控件,命名为ImageList1,ImageList2;在ImageList1中装入两个16X16大小的图标;添加两个 TButton控件,命名为Button1,Button2;再添加一个TImage控件,命名为Image1。其它操作,见下。
1. 具有图标及热链接效果的列表框
在ListBox1的Items属性中添加几个字符串,并在ListBox1的OnDrawItem事件中编写代码如下:
涉及TListBox自定义重绘的属性和事件:
属性:
Style: 取值为lbStandard(标准风格),lbOwnerDrawFixed(所有者固定绘制风格),lbOwnerDrawVariable(所有者可变绘制风格)
说明:
1. 当Style = lbStandard时,使用控件默认的绘制风格。
2. 当Style = lbOwnerDrawFixed时,用户只能在控件默认大小的区域绘图。
3. 当Style = lbOwnerDrawVariable时,用户可改变控件默认的绘图区域大小并决定如何绘图。
事件:
OnMeasureItem:当Style = lbOwnerDrawVariable时计算TListBox中某项的高度时调用。
OnDrawItem :当Style = lbOwnerDrawVariable时由用户例程确定如何绘制TlistItem。
由此,可以看出,要实现定制界面风格的TListBox,首先,需要设置TlistBox的Style 属性为lbOwnerDrawVariable,其次,需要写自定义的重绘事件。
二、 特殊效果的实现
在窗体(Form1)上放置5个ListBox,名称分别为 ListBox1……ListBox5,将所有ListBox的Style属性设置为lbOwnerDrawVariable;在Form1上添加两个 TImageList控件,命名为ImageList1,ImageList2;在ImageList1中装入两个16X16大小的图标;添加两个 TButton控件,命名为Button1,Button2;再添加一个TImage控件,命名为Image1。其它操作,见下。
1. 具有图标及热链接效果的列表框
在ListBox1的Items属性中添加几个字符串,并在ListBox1的OnDrawItem事件中编写代码如下:
procedure TForm1.ListBox2DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var AIcon, BIcon: TIcon; begin try file://从上述ImageList1中装入两个图标 AIcon := TIcon.Create; BIcon := TIcon.Create; file://装入图标到AIcon, BIcon ImageList1.GetIcon(0, AIcon); ImageList1.GetIcon(1, BIcon); file://填充绘图区 ListBox1.Canvas.FillRect(Rect); file://判断ListBox1中的当前重绘项是否被选中,根据状态装入不同的图标 if odSelected in State then ListBox1.Canvas.Draw |