为了界面的美观,我想在程序运行后,用户选择CheckListBox控件时,不显示选中状态,即不在选中项显示一个虚线框!!
我现在是这样写的,在OnDrawItem事件中:
  with TCheckListBox(Control) do
  Begin
    Canvas.FillRect(Rect);
    Canvas.Brush.Color := clWhite;
    Canvas.Font.Color := clBlack;
    Canvas.TextRect(Rect, Rect.Left+1, Rect.Top+1, Items[Index]);
  End;
以上语句能将焦点获得项的蓝色去掉,但还是要显示一个虚线框!!!我想把虚线框去掉!!
显示的效果要做到相当于CheckListBox的LTEMS。TEXT用的是LABEL一样!!现在只能用该控件!!
问题解决立刻给分!!!在此先谢了!!!

解决方案 »

  1.   

    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      ActiveControl := NIL;
    end;
      

  2.   

    procedure TForm1.CheckListBox1Enter(Sender: TObject);
    begin
      ActiveControl := NIL;
    end;
      

  3.   

    风舞轻扬:还是不对呀!!
    CheckListBox控件的Items.Text好象是用另外的控件绑定的,也就是说CheckListBox控件是两个控件组合的,只用鼠标点击文本时,也就是说只点不选时,还是不对,并且在ONENTER中写,还不能选!!
      

  4.   

    你可以用你自己的方法试着去做,我随便加了点代码在你的程序中,提供点思路,仅供参考,还需要你自己去完善!
    procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    var
      Rgn, SaveRgn: HRgn;
    begin
    with TCheckListBox(Control) do
      Begin
        Canvas.Brush.Color := clwhite;
        Canvas.Font.Color := clBlack;
        with Rect do
           Rgn := CreateRectRgn(Left + 2, Top + 2, Right - 2, Bottom - 2);
        Canvas.FillRect(clipRect);
        SelectObject(canvas.Handle, Rgn);
        FillRgn(canvas.Handle, Rgn, Canvas.Brush.Handle);
        deleteObject(Rgn);
        Canvas.TextRect(Rect, Rect.Left+1, Rect.Top+1, Items[Index]);
      End;end;
      希望对你有所帮助;
      

  5.   

    procedure TForm1.CheckListBox1Click(Sender: TObject);
    begin
      CheckListBox1.ItemIndex := -1;
      ActiveControl := NIL;
    end;好像这样可以不要OnDrawItem事件