首页  编辑  

ListBox中的RadioButton功能

Tags: /超级猛料/VCL/(Check|List|ComBo)BOX/   Date Created:

在Listbox中使用RadioButton/CheckBox?

use radio buttons in a listbox?

Author: David  

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

 Rect: TRect; State: TOwnerDrawState);

var

 drawRect: TRect;

begin

 with ListBox1.Canvas do

 begin

   FillRect(rect);

   drawRect.Left := rect.Left + 1;

   drawRect.Right := Rect.Left + 13;

   drawRect.Bottom := Rect.Bottom;

   drawRect.Top := Rect.Top;

   if odSelected in State then

     DrawFrameControl(Handle, drawRect, DFC_BUTTON, DFCS_BUTTONRADIO or DFCS_CHECKED)

   else

     DrawFrameControl(Handle, drawRect, DFC_BUTTON, DFCS_BUTTONRADIO);

   TextOut(15, rect.Top + 3, ListBox1.Items[Index]);

 end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 ListBox1.Style := lbOwnerDrawVariable;

 ListBox1.ItemHeight := 20;

 //drei Test Items erstellen

 ListBox1.Items.Add('Item 1');

 ListBox1.Items.Add('Item 2');

 ListBox1.Items.Add('Item 3');

end;

---------------------------------------

CheckBox:

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

 Rect: TRect; State: TOwnerDrawState);

var

 drawRect: TRect;

begin

 with ListBox1.Canvas do

 begin

   FillRect(rect);

   drawRect.Left := rect.Left + 1;

   drawRect.Right := Rect.Left + 13;

   drawRect.Bottom := Rect.Bottom;

   drawRect.Top := Rect.Top;

   if odSelected in State then

     DrawFrameControl(Handle, drawRect, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_CHECKED)

   else

     DrawFrameControl(Handle, drawRect, DFC_BUTTON, DFCS_BUTTONCHECK);

   TextOut(15, rect.Top + 3, ListBox1.Items[Index]);

 end;

end;

img_7060.bmp (178.1KB)