有关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);
}
}
}
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);
}
}
}
相关文章推荐
- Java代码书写风格及一些简单的注意事项
- 网站代码优化需要注意的一些细节
- 一些有关图像处理的代码片段(抓图、倒影、圆角)
- Java编程思想第三章---有关运算符的一些细节注意和思考
- 有关HTML+CSS需注意的一些问题
- watir代码移植至watir-webdriver代码时需要注意的一些事项
- HM编码器代码阅读(25)——和熵编码有关的一些类
- 整理一些有关检查数据的JS代码
- Java代码书写风格及一些简单的注意事项
- java代码中一些要注意的语法应用
- java笔记 一些和java网络及IO有关的代码
- 有关类的一些注意点
- 注意:C语言中没有指定同一运算符的多个操作数或者某函数各个参数的求值顺序,如果代码的执行结果和求值顺序有关,都是不好的程序设计风格。
- Android实例demo9之sqlite中一些要注意的地方 代码执行时间
- 转发高人文章:以前写的一些有关代码签名/时间戳数字证书的东东
- .net调用C++代码需要注意的一些问题
- 有关前端代码的一些总结
- 编写Ruby代码注释时需要注意的一些问题
- 从代码看一个程序员的笔力 -- 您所未注意的一些事
- Objective-C中有关名称的一些基础规则及其注意要点