您的位置:首页 > 编程语言

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

2009-11-16 09:26 225 查看
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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: