ListBox的一些特殊用法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ListBox的一些特殊用法

ListBox的一些特殊用法——美化、滚动条、位图、快速查找 2009-07-16 09:33 ?????? 前面学习了窗体与界面设计,现在来学习下组件的应;因为是照着书上在学习,所以也没有太完善的计划,每天学到啥感觉以后会用的着的,就在这里记录下,所以博客现在暂时还是有点凌乱的,不过暂时只是为了自己存储资料和做做笔记而已,等以后有时间了,学习的差不多了就再回来整理。 ???? 刚在书上看了下组件TListBox的几种特殊用法,就是利用canvas画布美化ListBox,给ListBox加水平滚动条(这个默认是没有的),然后是在ListBox中显示位图,最后就是在ListBox中实现快速查找,下面一一介绍: ????? 在Delphi中,主要通过Canvas画布对象进行绘图,Delphi可以在窗体或组件上绘制出各式各样的图像,通过Canvas的属性将一些图形变为文字,或是将一些文字变为图形;这里我主要是通过Canvas属性来美化列表框ListBox中的列表项: 首先要将ListBox的Style属性设为lbownerDrawFixed,然后再ListBox的OnDrawItem事件上书写代码如下: procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with Control as TListBox do begin ??? Canvas.FrameRect(Clientrect); ??? if odSelected in State then ??? begin ????? Canvas.Brush.Color:=clRed; ????? Canvas.RoundRect(Rect.Left,Rect.Top,Rect.Right,Rect.Bottom,8,15); //前面四个参数分别是左上顶角和右下顶点坐标,构成一个矩形区域,后面两参数是来设置四个顶角端的小三角大小,为了美观可自行设定 ????? setBkMode(Canvas.Handle,TRANSPARENT );//这个在前面文章中有介绍,是设置透明背景 ????? Canvas.TextOut((Rect.right-Rect.Left) div 2,Rect.Top,Items.Strings[Index]); ??? end ??? else ??? begin ????? Canvas.Brush.Color:=clSkyBlue;//这里为了列表项和ListBox背景色一致,最好就都设成一样颜色 ????? Canvas.RoundRect(Rect.Left,Rect.Top,Rect.Right,Rect.Bottom,15,15); ????? Canvas.TextRect(Rect,Rect.Left,Rect.Top,Items.Strings[Index]); ??? end; end; end; 给ListBox加水平滚动条,代码如下: procedure TForm1.ListBox1Enter(Sender: TObject); var a,bb: integer; begin bb:= 0; for a := 0 to listbox1.Items.Count - 1 do ??? if bb listbox1.Canvas.TextWidth(listbox1.Items[a])then ????? bb := listbox1.Canvas.Textwidth(listbox1.Items[a]); sendmessage(listbox1.Handle ,lb_sethorizontalextent,bb+2,0); end; 在ListBox中显示位图:也是通过Canvas对象,在ListBox列表项前面加上一副图片;首先要三个TImage控件,设为不可见;将ListBox的Style属性设为lbownerDrawFixed,并将ItemHeigth属性设为32(这里可能是TImage内选择的是32为图标),然后再ListBox的OnDrawItem事件上书写代码如下: procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var Abmp : TBitmap; bmpPosition : Integer; ListCanvas : TCanvas; begin bmpPosi

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档