博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ListBox自绘,列表显示一系列图片
阅读量:5922 次
发布时间:2019-06-19

本文共 2282 字,大约阅读时间需要 7 分钟。

     最近本人做的项目中,需要将一系列图片列表显示到一个ListBox中,本人使用的raize套件中的RzListBox,这里讲的方法同样适用于这两种组件,首先设置ListBox的style为:lbOwnerDrawVariable,然后处理ListBox的MeasureItem与DrawItem事件。


      代码如下:

procedure TFrameAuction.RzListBoxMeasureItem(Control: TWinControl;
  Index: Integer; var Height: Integer);
begin
  Height:
=
82
;//设置item的高度
end;

procedure TFrameAuction.RzListBoxDrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  jpeg:TJPEGImage;
  bmp:TBitMap;
  root,cnode: IXMLNode;
  icon: TIcon;
  fname:
string
;
begin
  root:
=
self.FXMLDoc.DocumentElement;
  cnode:
=
root.ChildNodes[Index];
  with (Control 
as
 TRzListBox).Canvas 
do
 begin
    bmp:
=
TBitmap.Create;
    jpeg:
=
TJPEGImage.Create;
    
if
 cnode.GetAttribute(
'
photo
'
)
=
''
 then begin
      fname:
=
ExtractFilePath(Application.ExeName)
+
'
images\none.jpg
'
;
    end 
else
 begin
      fname:
=
ExtractFilePath(Application.ExeName)
+
'
images\
'
+
root.GetAttribute(
'
id
'
)
+
'
-
'
+
cnode.GetAttribute(
'
photoid
'
)
+
'
-
'
+
cnode.GetAttribute(
'
photo
'
);
      
if
 not FileExists(fname) then
        fname:
=
ExtractFilePath(Application.ExeName)
+
'
images\none.jpg
'
;
    end;
    jpeg.LoadFromFile(fname);
    with bmp 
do
    begin
      PixelFormat:
=
pf24bit;
      Height:
=
60
;
      Width:
=
self.RzListBox.Width;
      Canvas.Brush.Color:
=
$00F0EDE6;
      Canvas.FillRect(Canvas.ClipRect);
      Canvas.StretchDraw(Bounds(
0
,
0
,
80
,
60
), jpeg);
    end;
    FillRect(Rect);
    Draw(Rect.Left
+
1
, Rect.Top 
+
 
1
,bmp);
    icon:
=
TIcon.Create;
    
if
 cnode.GetAttribute(
'
status
'
)
=
'
1
'
 then
      self.ImageListStatus.GetIcon(
8
,icon)
    
else
 
if
 cnode.GetAttribute(
'
status
'
)
=
'
3
'
 then
      self.ImageListStatus.GetIcon(
2
,icon)
    
else
 
if
 cnode.GetAttribute(
'
status
'
)
=
'
2
'
 then begin
      
if
 cnode.GetAttribute(
'
bargainflag
'
)
=
'
0
'
 then
        self.ImageListStatus.GetIcon(
6
,icon)
      
else
        self.ImageListStatus.GetIcon(
4
,icon)
    end 
else
 
if
 cnode.GetAttribute(
'
status
'
)
=
'
0
'
 then begin
      
if
 root.GetAttribute(
'
activeitem
'
)
=
cnode.GetAttribute(
'
itemid
'
) then
         self.ImageListStatus.GetIcon(
0
,icon);
    end;
    Draw(Rect.Left
+
1
+
80
+
5
,Rect.Top
+
22
,icon);
    TextOut(
1
,Rect.Top
+
64
,cnode.GetAttribute(
'
no
'
)
+
'
号:
'
+
cnode.GetAttribute(
'
itemtitle
'
));
  end;
  icon.Free;
  bmp.Free;
  jpeg.Free;
end;

运行结果如下:

    本文转自 OldHawk  博客园博客,原文链接:http://www.cnblogs.com/taobataoma/archive/2007/07/28/834873.html,如需转载请自行联系原作者

你可能感兴趣的文章
Gradle 1.12用户指南翻译——第二十五章. Scala 插件
查看>>
GoolgeAppEngine Web开发之单元测试环境的搭建
查看>>
Oracle 10g RAC Installer 故障之--Oracle软件安装无法发现集群 推荐
查看>>
JS中过滤HTML文本脚本片段
查看>>
稳扎稳打Silverlight(18) - 2.0视频之详解MediaElement, 开发一个简易版的全功能播放器...
查看>>
utlook打开邮件链接提示Application not found
查看>>
Microsoft 用户体验虚拟化 UE-V 1.0 RC 发布
查看>>
【黑金ZYNQ7000系列原创视频教程】01.熟悉vivado——纯逻辑led实验
查看>>
Win7关闭防火墙的脚本
查看>>
如何更改Exchange Server 最多发送90人的默认设置
查看>>
快速构建Windows 8风格应用12-SearchContract概述及原理
查看>>
那些年我们追过的桌面虚拟化技术-浅析
查看>>
powershell 修改笔记本的电源设置
查看>>
Methods of quick exploitation of blind SQL Injection Vulnerabilities in Oracle
查看>>
Django 路由系统简述
查看>>
Liferay Dynamic CSS Filter方法的研究 - 计算资源文件的缓存base名
查看>>
DataGridView 判断新增行:
查看>>
Apache配置实现cgi
查看>>
基于OHCI的USB主机 —— 中断向量处理
查看>>
【干货】如何排查移动站点流量异常
查看>>