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;