有关StringGrid控件的代码和一些注意

1.

StringGrid->FixedRows必须小于StringGrid->RowCount

StringGrid->FixedCols必须小于StringGrid->ColCount

 

2. 

如果想去掉StringGrid显示时选中的区域,就要将defaultdraw设为false,然后在自画StringGrid。

 

3.

设置单独某行的宽度StringGrid->ColWidths[i] = Width;

设置单独某列的高度StringGrid->RowHeights[i] = Height;

代码: 

1.确定选中区间:

void __fastcall TObjectForm::FormShow(TObject *Sender)

{

    TGridRect myRect;
    myRect.Top = 1;

    myRect.Bottom = 1;
    myRect.Left = 0;   

    myRect.Right = StringGrid->ColCount;   
    StringGrid->Selection = myRect;   

}

 

2.OnMouseDown事件:

void __fastcall TObjectForm::StringGridMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    TStringGrid *thisSender = (TStringGrid *)Sender;
    int row,col;
    thisSender->MouseToCell(X,Y,col,row);
    if (row <= 0){
        MouseIndex = 1;
        return;
    }
    MouseIndex = row;

    //判断鼠标是否点中小方块区域
    if (col == 0 && X < 20) {
        TDataLine *pTemp = (TDataLine*)ChartForm->List->Items[MouseIndex - 1];
        pTemp->ShowPoint = !pTemp->ShowPoint;
        ChartForm->DrawGraph();
        StringGrid->Repaint();                   //重画
    }

}

 

3.OnDrawCell事件:(StringGrid自画)

void __fastcall TObjectForm::StringGridDrawCell(TObject *Sender,
                int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
    StringGrid->Canvas->Font->Color = clBlack;
    if (State.Contains(gdSelected)){
        StringGrid->Canvas->Brush->Color = clHighlight;
        StringGrid->Canvas->Font->Style = TFontStyles() << fsBold;
    }else{
        if (ARow == 0){
            StringGrid->Canvas->Brush->Color = clBackground;
            StringGrid->Canvas->Font->Color = clYellow;
        }else if (ARow % 2 == 0){
            StringGrid->Canvas->Brush->Color = clCream;
        }else{
            StringGrid->Canvas->Brush->Color = clSkyBlue;
        }
    }
    AnsiString text = StringGrid->Cells[ACol][ARow];
    StringGrid->Canvas->Pen->Color = clBlack;
    StringGrid->Canvas->FillRect(Rect);
    StringGrid->Canvas->Brush->Style = bsClear;
    if (ARow > 0 && ACol == 0){
        TRect SR(Rect.Left + 20, Rect.Top, Rect.Right, Rect.Bottom);
        DrawText(StringGrid->Canvas->Handle, text.c_str(), text.Length(),
                    &SR, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
    }else{
        TRect SR(Rect.Left + 5, Rect.Top, Rect.Right, Rect.Bottom);
        DrawText(StringGrid->Canvas->Handle, text.c_str(), text.Length(),
                    &SR, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
    }
   
    if (ARow == 0){
        return;
    }
    TDataLine *pTemp = (TDataLine*)ChartForm->List->Items[ARow-1];
    if ( ARow > 0 && ACol == 0){
        if (pTemp->ShowPoint){
            ImageList->Draw(StringGrid->Canvas, Rect.Left + 2, Rect.Top + 2, 1, true);
        }else{
            ImageList->Draw(StringGrid->Canvas, Rect.Left + 2, Rect.Top + 2, 0, true);
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值