首先咱们说说自绘制, 表格要填充内容,具体代码如下:
int count = [ data row count]
AdvStringGrid1->HideFocusRect=true; //隐藏表格选中时的虚线框
// 表格初始化,表头要定好
AdvStringGrid1->Clear(); //清空表格内容
AdvStringGrid1->RowCount = count + 1; //留一行作为表头,所以总的函数+1
AdvStringGrid1->RowHeights[0] = 47; //第一行表头的行高度
AdvStringGrid1->Cells[0][0] = "ID";
AdvStringGrid1->ColWidths[0] = 0; //宽度为0,就是要隐藏第0列的数据
AdvStringGrid1->Cells[1][0] = "编号"; //只是第1列的字段名,作为表头内容
AdvStringGrid1->ColWidths[1] = 60; //设置第1列的像素宽度
AdvStringGrid1->Cells[2][0] = "时间";
AdvStringGrid1->ColWidths[2] = 180;
AdvStringGrid1->Cells[3][0] = "问题描述";
AdvStringGrid1->ColWidths[3] = 200;
AdvStringGrid1->Cells[4][0] = "分析类型";
AdvStringGrid1->ColWidths[4] = 100;
AdvStringGrid1->Cells[5][0] = "文件列表";
AdvStringGrid1->ColWidths[5] = 300;
//定义好表头之后来填充数据
for(int i=0; i < count; i++)
{
int ARow = i + 1;
AdvStringGrid1->RowHeights[ARow] = 47;
AdvStringGrid1->Cells[0][ARow] = [key];
AdvStringGrid1->Cells[1][ARow] = [key];
AdvStringGrid1->Cells[2][ARow] = [timestamp];
AdvStringGrid1->Cells[3][ARow] = [info];
AdvStringGrid1->Cells[4][ARow] = [event];
AdvStringGrid1->Cells[5][ARow] = [files];
}需要设置表格的默认属性,还有就是在合适的地方刷新表格内容:
/*
MouseActions:
{
RowSelect = true //鼠标滚动可以对表格的行进行选中
WheelIncrement = 1 //滚动的偏移
}
*/
// 表格内容居中对齐
void __fastcall TForm1::AdvStringGrid1GetAlignment(TObject *Sender, int ARow, int ACol,
TAlignment &HAlign, TVAlignment &VAlign)
{
HAlign = taCenter;
VAlign = vtaCenter;
}
void __fastcall TForm1::AdvStringGrid1ScrollCell(TObject *Sender, int ACol, int ARow,
int ScrollPosition, int ScrollMin, int ScrollMax)
{
ActionLogReqRefresh->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AdvStringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
bool &CanSelect)
{
if(ARow > 0)
{
CanSelect = true;
}
else
{
CanSelect = false; // 第一行作为表头,不允许被选中
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AdvStringGrid1ClickCell(TObject *Sender, int ARow, int ACol)
{
if(ARow > 0)
{
AdvStringGrid1->RowSelect[ARow] = true;
ActionLogReqRefresh->Execute(); // AdvStringGrid1->Invalidate();
}
}
//---------------------------------------------------------------------------
// 按键也会影响到表格,所以操作按键也需要刷新表格内容
void __fastcall TForm1::AdvStringGrid1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
if(Key == VK_UP || Key == VK_DOWN)
{
ActionLogReqRefresh->Execute(); // AdvStringGrid1->Invalidate();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AdvStringGrid1SelectionChanged(TObject *Sender, int ALeft,
int ATop, int ARight, int ABottom)
{
ActionLogReqRefresh->Execute(); // AdvStringGrid1->Invalidate();
}
最后咱们来说一下自绘制表格控件;
void __fastcall TForm1::AdvStringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
if(ARow>= 0)
{
AdvStringGrid1-> Canvas-> Brush-> Style = TBrushStyle::bsSolid;
if(ARow >= 1)
{
if(AdvStringGrid1->RowSelect[ARow])
{
AdvStringGrid1-> Canvas-> Brush-> Color = (TColor)0xf9f6f3;
}
else
{
AdvStringGrid1-> Canvas-> Brush-> Color = (TColor)clWhite;
}
}
else
{
AdvStringGrid1-> Canvas-> Brush-> Color = (TColor)0xf9f6f3;
}
// Rect.Right = Rect.Right + 1;
AdvStringGrid1-> Canvas-> FillRect(Rect);
AdvStringGrid1-> Canvas-> Brush-> Style = TBrushStyle::bsClear;
AdvStringGrid1-> Canvas-> Pen-> Color = clSilver;
AdvStringGrid1-> Canvas-> Pen-> Width = 1;
// AdvStringGrid1-> Canvas-> Rectangle(Rect);
AdvStringGrid1-> Canvas->MoveTo(Rect.Left, Rect.Bottom);
AdvStringGrid1->Canvas->LineTo(Rect.Right+1, Rect.Bottom);
if(ACol >=1)
{
{
AdvStringGrid1->Canvas->Font->Size = 12;
DrawText(AdvStringGrid1-> Canvas-> Handle, AdvStringGrid1-> Cells[ACol][ARow].c_str(),
-1, (RECT*)&Rect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
}
}
else
{
AdvStringGrid1->Canvas->Font->Size = 12;
Rect.Left = Rect.left + 15;
DrawText(AdvStringGrid1-> Canvas-> Handle, AdvStringGrid1-> Cells[ACol][ARow].c_str(),
-1, (RECT*)&Rect, DT_SINGLELINE | DT_VCENTER );
}
}
}自绘制表格控件,表格的每一个单元格都需要刷新背景,否则背景会残留。
版权声明:本文为vrix原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。