只要在Tcombobox的OnDrawItem事件里,绘制item的图标就可以.
代码文件:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ImgList, ComCtrls; type TForm1 = class(TForm) ComboBox1: TComboBox; ImageList1: TImageList; procedure FormCreate(Sender: TObject); procedure ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure FormDestroy(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var Bits: array[0..3] of TBitmap; procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to Length(Bits)-1 do begin Bits[i] := TBitmap.Create; ImageList1.GetBitmap(i, Bits[i]); ComboBox1.Items.Add(Format('Item %d', [i])); end; ComboBox1.Style := csOwnerDrawVariable; ComboBox1.ItemHeight := Bits[0].Height + 4; ComboBox1.ItemIndex := 0; end; procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin ComboBox1.Canvas.FillRect(Rect); ComboBox1.Canvas.BrushCopy(Bounds(Rect.Left+2, Rect.Top+2, Bits[Index].Width, Bits[Index].Height), Bits[Index], Bounds(0, 0, Bits[Index].Width, Bits[Index].Height), clBlack); ComboBox1.Canvas.TextOut(Rect.Left + 24, Rect.Top + 3, ComboBox1.Items[Index]); end; procedure TForm1.FormDestroy(Sender: TObject); var i: Integer; begin for i := 0 to Length(Bits)-1 do Bits[i].Free; end; end.