首页  编辑  

在ComBox中添加Checkbox

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

在ComBox中添加Checkbox

add flat checkboxes into a TComboBox and multiselect?

Author: Chrizz  

0 Comments to this tip [Write new comment]

[ Print tip ]    

Tip Rating (0):  

     

//Set ComboBox.Style:=csOwnerDrawFixed

//tested with D6 and WinXP...

 //.....

 private

   Selected: array of Boolean;

 //.....

procedure TTForm1.ComboBox1DrawItem(Control: TWinControl;

    Index: Integer; Rect: TRect; State: TOwnerDrawState);

begin

 SetLength(Selected, TComboBox(Control).Items.Count);

 with TComboBox(Control).Canvas do

 begin

   FillRect(rect);

   Rect.Left   := Rect.Left + 1;

   Rect.Right  := Rect.Left + 13;

   Rect.Bottom := Rect.Bottom;

   Rect.Top    := Rect.Top;

   if not (odSelected in State) and (Selected[Index]) then

     DrawFrameControl(Handle, Rect, DFC_BUTTON,

       DFCS_BUTTONCHECK or DFCS_CHECKED or DFCS_FLAT)

   else if (odFocused in State) and (Selected[Index]) then

     DrawFrameControl(Handle, Rect, DFC_BUTTON,

       DFCS_BUTTONCHECK or DFCS_CHECKED or DFCS_FLAT)

   else if (Selected[Index]) then

     DrawFrameControl(Handle, Rect, DFC_BUTTON,

       DFCS_BUTTONCHECK or DFCS_CHECKED or DFCS_FLAT)

   else if not (Selected[Index]) then

     DrawFrameControl(Handle, Rect, DFC_BUTTON, DFCS_BUTTONCHECK or DFCS_FLAT);

   TextOut(Rect.Left + 15, Rect.Top, TComboBox(Control).Items[Index]);

 end;

end;

procedure TForm1.ComboBox1Select(Sender: TObject);

var

 i: Integer;

 Sel: string;

begin

 Sel := EmptyStr;

 Selected[TComboBox(Sender).ItemIndex] := not Selected[TComboBox(Sender).ItemIndex];

 for i := 0 to TComboBox(Sender).Items.Count - 1 do

   if Selected[i] then

     Sel := Sel + TComboBox(Sender).Items[i] + ' ';

 ShowMessage(Sel);  //Just for test...

end;