本文共 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,如需转载请自行联系原作者