ListBox com botões de Rádio
O ListBox do Delphi exibe uma coleção de itens. A propriedade de MultiSelect determina se um usuário puder selecionar mais de um item. Quando MultiSelect é fixado para falso (estado de falta) um ListBox age como um RadioButton lista recipiente (semelhante a RadioGroup).
Aqui é como puxar um botão de rádio para cada um dos itens em uma Caixa de Lista (significante só se MultiSelect é falso):
Nota: Coloque um ListBox em um formulário, acrescente valores a sua propriedade itens:
procedure TRadioListBoxForm.FormCreate(Sender: TObject) ;
begin
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;