Mega Code Archive

 
Categories / Delphi / Graphic
 

Draw bitmaps in a TComboBox

Title: draw Bitmaps in a TComboBox? // This code works also with a TListBox var Bitmap1, Bitmap2, Bitmap3, Bitmap4: TBitmap; procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1.Style := csOwnerDrawVariable; //Set height of one item ComboBox1.ItemHeight := 20; //load all bitmaps Bitmap1 := TBitmap.Create; Bitmap1.LoadFromFile('chem16.bmp'); Bitmap2 := TBitmap.Create; Bitmap2.LoadFromFile('chip16.bmp'); Bitmap3 := TBitmap.Create; Bitmap3.LoadFromFile('factry16.bmp'); Bitmap4 := TBitmap.Create; Bitmap4.LoadFromFile('skylin16.bmp'); //assign bitmaps with item objects - caption of the items: Bitmap 1 - Bitmap 4 ComboBox1.Items.AddObject('Bitmap 1', Bitmap1); ComboBox1.Items.AddObject('Bitmap 2', Bitmap2); ComboBox1.Items.AddObject('Bitmap 3', Bitmap3); ComboBox1.Items.AddObject('Bitmap 4', Bitmap4); end; procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var Bitmap: TBitmap; Offset: Integer; begin offset := 0; with ComboBox1.Canvas do begin FillRect(Rect); Bitmap := TBitmap(ComboBox1.Items.Objects[Index]); if Bitmap nil then begin //copy bitmap to combobox coordinate BrushCopy(Bounds(Rect.Left + 2, Rect.Top + 2, Bitmap.Width, Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clred); Offset := Bitmap.Width + 8; end; //Set a caption to each item TextOut(Rect.Left + Offset, Rect.Top, Combobox1.Items[Index]); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin //free all bitmap objects bitmap1.Free; bitmap2.Free; bitmap3.Free; bitmap4.Free; end;