OnDrawItem (C++)
From RAD Studio Code Examples
Language:
Description
Here is a typical handler for an OnDrawItem event. In the example, a list box with the lbOwnerDrawFixed style draws a bitmap to the left of each string. Select the TListBox and set the ItemHeight property to 32. Select the ImageList and set the Layout Height and Width to 32. Double-click the ImageList to load the images. Be sure to load in the correct order: logo2, Sunflower, butterfly.
Code
#include <memory> //For STL auto_ptr class Graphics::TBitmap *bitmap0, *bitmap1, *bitmap2; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { static std::auto_ptr<Graphics::TBitmap> _bitmap0Cleaner(bitmap0 = new Graphics::TBitmap); static std::auto_ptr<Graphics::TBitmap> _bitmap1Cleaner(bitmap1 = new Graphics::TBitmap); static std::auto_ptr<Graphics::TBitmap> _bitmap2Cleaner(bitmap2 = new Graphics::TBitmap); ImageList1->GetBitmap(0, bitmap0); ListBox1->Items->AddObject("Flowers", bitmap0); ImageList1->GetBitmap(1, bitmap1); ListBox1->Items->AddObject("Animal", bitmap1); ImageList1->GetBitmap(2, bitmap2); ListBox1->Items->AddObject("Butterfly", bitmap2); } void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { Graphics::TBitmap *pBitmap; // Temporary variable for the item�s bitmap int Offset = 2; // Default text offset width // Note that you draw on the listbox�s canvas, not on the form. TCanvas *pCanvas = (dynamic_cast<TListBox *>(Control))->Canvas; pCanvas->FillRect(Rect); // clear the rectangle pBitmap = dynamic_cast<Graphics::TBitmap *>((dynamic_cast<TListBox *>(Control))->Items->Objects[Index]); if (pBitmap) { pCanvas->BrushCopy( Bounds(Rect.Left + Offset, Rect.Top, pBitmap->Width, pBitmap->Height), pBitmap, Bounds(0, 0, pBitmap->Width, pBitmap->Height), clRed); // render bitmap Offset += pBitmap->Width + 4; // Add four pixels between bitmap and text. } // display the text pCanvas->TextOut(Rect.Left + Offset, Rect.Top, (dynamic_cast<TListBox *>(Control))->Items->Strings[Index]); }
Uses
- Vcl.StdCtrls.TCustomListBox.OnDrawItem ( fr | de | ja )
- Vcl.StdCtrls.TCustomListBox.Canvas ( fr | de | ja )