下面代码是我的一个控件的部分代码,希望对你有帮助:    int StartLeft=0;//从那里画的坐标
    int Flags;
    bool FChecked;
    bool FIsPushed;
    int FCaptionOffset=5;
    Flags=DFCS_BUTTONCHECK;// CheckBox style
    if(FChecked)
      Flags+=DFCS_CHECKED;   // Checked now    if(FIsPushed)
    {
      FIsPushed=false;
      Flags+=DFCS_PUSHED;   // Push now
    }
    
    //画控件
    DrawFrameControl(this->Canvas->Handle,&TRect(StartLeft,0,StartLeft+15,13),DFC_BUTTON,Flags);    StartLeft+=15+FCaptionOffset;    FDrawRight=StartLeft + TextW;// Use for MouseDown
    FDrawBottom=H;    //画文本 
    if(FEnabled)// Normal
    {
      this->Canvas->Brush->Style=bsClear;
      this->Canvas->TextOut(StartLeft,0,this->Caption);
    }
    else        // Draw Grayed text
    {
      TRect Rect=TRect(StartLeft,0,StartLeft + TextW,H);      this->Canvas->Brush->Style=bsClear;      OffsetRect(&Rect,1,1);
      this->Canvas->Font->Color=clBtnHighlight;
      DrawText(this->Canvas->Handle,this->Caption.c_str(),-1,&Rect,DT_VCENTER);      this->Canvas->Brush->Style=bsClear;      OffsetRect(&Rect,-1,-1);
      this->Canvas->Font->Color=clBtnShadow;
      DrawText(this->Canvas->Handle,this->Caption.c_str(),-1,&Rect,DT_VCENTER);
    }

解决方案 »

  1.   

    给你个简单的办法,很多软件也有类似的选择问题,他们都是在里面直接显示一个 √选中,通过click事件变成○没选中,这个办法简单吧?速达财务就这么做的,效果不错。
      

  2.   

    你可以在DrawCell事件中处理。
      

  3.   

    你为什么选择了TDrawGrid ,
    显示文本推荐使用TStringGrid,数据库是用TDBGrid.
    DrawGrid操作不方便,他用来显示图有些优势。
      

  4.   

    如果不是必需,建议你是用TStringCell,他操作方便多了procedure TForm1.StringGrid1DblClick(Sender: TObject);
    begin
      with StringGrid1 do begin
        if ( Cells[Col, Row] = '√') then
          Cells[Col, Row]:= '□'  // ○
        else
          Cells[Col, Row]:= '√';
      end;
    end;
    然后你自己判断表格里面的内容,进行相应的操作就行了