RAD Studio VCL Reference
|
Occurs when an item in an owner-draw list box needs to be redisplayed.
property OnDrawItem: TDrawItemEvent;
__property TDrawItemEvent OnDrawItem;
Use OnDrawItem to write a handler for drawing of the items in list boxes with the Style values lbOwnerDrawFixed, lbOwnerDrawVariable, or lbVirtualOwnerDraw. OnDrawItem occurs when the list box needs to display an item. OnDrawItem occurs only for owner-draw list boxes.
The size of the rectangle that contains the item is determined either by the ItemHeight property for fixed owner-draw list boxes or by the response to the OnMeasureItem event for variable owner-draw list boxes.
C++ Examples:
/* 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 on the ImageList to load the images. Be sure to load in the correct order, logo2, Sunflower, butterfly. */ void __fastcall TForm1::FormCreate(TObject *Sender) { MyList = new TStringList; bitmap0 = new Graphics::TBitmap; bitmap1 = new Graphics::TBitmap; bitmap2 = new Graphics::TBitmap; // MyList->Add("Animal"); // MyList->Add("Flowers"); // MyList->Add("Butterfly"); // ListBox1.Items->AddStrings(MyList); 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 item’s bitmap int Offset = 2; // default text offset width // note that we draw on the listbox’s canvas, not on the form TCanvas *pCanvas = ((TListBox *)Control)->Canvas; pCanvas->FillRect(Rect); // clear the rectangle pBitmap = (Graphics::TBitmap *)((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, ((TListBox *)Control)->Items->Strings[Index]); }
Delphi Examples:
{ 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 on the ImageList to load the images. Be sure to load in the correct order, logo2, Sunflower, butterfly. } procedure TForm1.FormCreate(Sender: TObject); begin MyList := TStringList.Create; bitmap0 := TBitmap.Create; bitmap1 := TBitmap.Create; bitmap2 := TBitmap.Create; // MyList.Add('Animal'); // MyList.Add('Flowers'); // MyList.Add('Butterfly'); // ListBox1.Items.AddStrings(MyList); 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); end; procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:TRect; State: TOwnerDrawState); var Bitmap: TBitmap; { temporary variable for the item’s bitmap } Offset: Integer; { text offset width } begin Bitmap := TBitmap.Create; with (Control as TListBox).Canvas do { draw on control canvas, not on the form } begin FillRect(Rect); { clear the rectangle } Offset := 2; { provide default offset } Bitmap := TBitmap((Control as TListBox).Items.Objects[Index]); { get the bitmap } if Bitmap <> nil then begin BrushCopy( Bounds(Rect.Left + Offset, Rect.Top, Bitmap.Width, Bitmap.Height), Bitmap, Bounds(0, 0, Bitmap.Width, Bitmap.Height), clRed); {render bitmap} Offset := Bitmap.width + 6; { add four pixels between bitmap and text} end; TextOut(Rect.Left + Offset, Rect.Top, (Control as TListBox).Items[Index]) { display the text } end; end;
Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
|
What do you think about this topic? Send feedback!
|