ListBox自绘,列表显示一系列图片

简介:
     最近本人做的项目中,需要将一系列图片列表显示到一个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,如需转载请自行联系原作者

相关文章
|
4月前
|
前端开发 JavaScript
Elementplus如何使面包屑往左边移动,右边头像下拉菜单如何写,下拉菜单如何靠中一点,下拉菜单出现文字不对齐怎么办,如何设置鼠标样式,如何使用阿里妈妈icon,如何点击icon全屏
Elementplus如何使面包屑往左边移动,右边头像下拉菜单如何写,下拉菜单如何靠中一点,下拉菜单出现文字不对齐怎么办,如何设置鼠标样式,如何使用阿里妈妈icon,如何点击icon全屏
Elementplus如何使面包屑往左边移动,右边头像下拉菜单如何写,下拉菜单如何靠中一点,下拉菜单出现文字不对齐怎么办,如何设置鼠标样式,如何使用阿里妈妈icon,如何点击icon全屏
|
6月前
|
索引
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
[Qt5&控件] 下拉框ComBoBox和层叠窗口StackedWidget控件组合使用
157 0
WPF-样式问题-处理ListBox、ListView子项内容全填充问题
WPF-样式问题-处理ListBox、ListView子项内容全填充问题
241 0
WPF-样式问题-ListBox或ListView中子项全填充去除边线问题
WPF-样式问题-ListBox或ListView中子项全填充去除边线问题
191 0
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
236 0
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
Winform中Picture控件图片的拖拽显示
原文:Winform中Picture控件图片的拖拽显示 注解:最近做了一个小工具,在Winform中对Picture控件有一个需求,可以通过鼠标从外部拖拽图片到控件的上,释放鼠标,显示图片! 首先你需要对你的整个Fom窗口的AllowDrop设置Ture                   //函数从动态链接库中倒入(模拟鼠标事件) [System.
1163 0