Как поместить 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. Мы сделали это программно, но можно определить и в Инспекторе объектов.
Комментарии