• 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;

    运行结果如下:
  • 相关阅读:
    [BZOJ3535][Usaco2014 Open]Fair Photography
    [LOJ#2270][BZOJ4912][SDOI2017]天才黑客
    [UOJ#122][NOI2013]树的计数
    [BZOJ4816][Sdoi2017]数字表格
    [BZOJ2154]Crash的数字表格
    [BZOJ3529][Sdoi2014]数表
    [BZOJ2820]YY的GCD
    [BZOJ2301][HAOI2011]Problem b
    [UOJ#223][BZOJ4654][Noi2016]国王饮水记
    [BZOJ4653][Noi2016]区间
  • 原文地址:https://www.cnblogs.com/taobataoma/p/834873.html
Copyright © 2020-2023  润新知