Как поместить RaditoButton внутрь TListBox
Как это реализуется:
Поместите на форму объект TListBox и добавьте элементы списка в его свойстве Items
Далее, запишите следующий код:
private { Private declarations } procedure LB_Draw_Item(ctrl: TWinControl; i: integer; rect: TRect; state: TOwnerDrawState); { ... } procedure TForm1.FormCreate(Sender: TObject); begin with lbRadio do begin Style:= lbOwnerDrawFixed; ItemHeight:= 20; OnDrawItem:= LB_Draw_Item; end; end; procedure TForm1.LB_Draw_Item(ctrl: TWinControl; i: integer; rect: TRect; state: TOwnerDrawState); const IsSelected: array[boolean] of integer = ( DFCS_BUTTONRADIO, DFCS_BUTTONRADIO or DFCS_CHECKED); var btnRect: TRect; listBox: TListBox; begin listBox:= ctrl as TListBox; with listBox.Canvas do begin FillRect(rect); btnRect.Left:= rect.Left + 5; btnRect.Right:= rect.Left + 15; btnRect.Bottom:= rect.Bottom; btnRect.Top:= rect.Top; DrawFrameControl( Handle, btnRect, DFC_BUTTON, IsSelected[odSelected in State]); TextOut(20, rect.Top + 1, listBox.Items[i]); end; end;
Примечание: свойство Style компонента TListBox должно быть установлено в lbOwnerDrawFixed для того, чтобы в событии OnDrawItem, когда он выводит элементы списка можно было нарисовать группу TRadioButton. Мы сделали это программно, но можно определить и в Инспекторе объектов.
Комментарии