Mega Code Archive

 
Categories / Delphi / VCL
 

How to Draw a Radio Button for a TListBox Item in Delphi

Title: How to Draw a Radio Button for a TListBox Item in Delphi Delphi's TListBox VCL component displays a collection of items in a scrollable list. The MultiSelect property determines if a user can select more than one item. When MultiSelect is set to false (default state) a ListBox acts as a TRadioButton list container (similar to TRadioGroup). Here's how to draw a radio button for each of the items in a List Box (meaningful only if MultiSelect is false) : Note: Drop a TListBox on a Form, add several strings to its Items property: procedure TRadioListBoxForm.FormCreate(Sender: TObject) ; begin //or use Object Inspector to assign the //OnDrawItem event handler, //Style and ItemHeight properties... ListBox1.Style := lbOwnerDrawFixed; ListBox1.ItemHeight := 20; ListBox1.OnDrawItem := ListBox_DrawItem; end; procedure TRadioListBoxForm.ListBox_DrawItem( Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) ; const IsSelected : array[Boolean] of Integer = (DFCS_BUTTONRADIO, DFCS_BUTTONRADIO or DFCS_CHECKED) ; var optionButtonRect: TRect; listBox : TListBox; begin listBox := Control as TListBox; with listBox.Canvas do begin FillRect(rect) ; optionButtonRect.Left := rect.Left + 1; optionButtonRect.Right := Rect.Left + 13; optionButtonRect.Bottom := Rect.Bottom; optionButtonRect.Top := Rect.Top; DrawFrameControl(Handle, optionButtonRect, DFC_BUTTON, IsSelected[odSelected in State]) ; TextOut(15, rect.Top + 3, listBox.Items[Index]) ; end; end; Note: the Style property sets ListBox1 owner drawing to true. The OnDrawItem is used to draw a radio button for each of the items.