二级DELPHI控件:Delphi中ListBox控件的六种特效计算机二级考试

文章作者 100test 发表时间 2009:04:30 03:54:13
来源 100Test.Com百考试题网


  2009年下半年全国计算机等级考试你准备好了没?考计算机等级考试的朋友,2009年下半年全国计算机等级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库
  Delphi5是Borland公司开发的全新的可视化集成开发环境,它使用语法严密的Pascal语言,并封装了Windows中的构件,形成了自己的一套控件库体系-VCL(Visual Component Library)。VCL控件体系具有很强的扩展性,为开发者设计特殊视觉效果的控件提供了技术支持。
  本文就Delphi5中的TListBox控件,通过多种手段实现了它的七种特殊视觉效果,以期对广大程序爱好者在界面设计上有所启发与帮助。
  一、 基础知识
  涉及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(Rect.Left, Rect.Top, AIcon)
  else
  ListBox1.Canvas.Draw(Rect.Left, Rect.Top, BIcon).
  file://输出文字
  ListBox1.Canvas.TextOut(Rect.Left AIcon.Width div 2, Rect.Top 2, ListBox1.Items[Index]).
  finally
  AIcon.Free.
  BIcon.Free.
  end.
  end.  
  注:也可在OnMeasureItem事件中改变列表项的高度。
  2. 具有横向滚动条效果的列表框
  在Form1上Button1的Click事件中书写如下代码:
  procedure TForm1.Button1Click(Sender: TObject).
  begin
  SendMessage(ListBox1.Handle, LB_SETHORIZONTALEXTENT, ListBox1.Width 30, 0).
  end.  
  具体横向滚动区域的宽度可通过具体计算得出,在此从略。

  2009年上半年全国计算机等级考试参考答案请进入计算机考试论坛

  2009年全国计算机等级考试报名信息汇总

  2009年NCRE考试有新变化

  2009年全国计算机等级考试-大纲

  2009年上半年全国计算机二级考试试题及答案

  2009年上半年全国计算机等级考试试题答案汇总



相关文章


计算机二级DELPHI函数:delphi中的split函数计算机二级考试
DELPHI函数:delphi杀进程的函数KillTask计算机二级考试
二级DELPHI控件:Delphi中ListBox控件的六种特效计算机二级考试
创建Photoshop式浮动窗口应用程序计算机二级考试
如何用Delphi编写自己的可视化控件(1)计算机二级考试
如何用Delphi编写自己的可视化控件(2)计算机二级考试
如何用Delphi编写自己的可视化控件(3)计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛