dbgrideh重绘单元格造成数据重叠

vfdn 2016-11-22 10:27:16
void __fastcall TFrameCyzlzxex_SdSingle::DBGridEh_PtzlDrawColumnCell(TObject *Sender, const TRect &Rect,
int DataCol, TColumnEh *Column, Gridseh::TGridDrawState State)
{
if(!DBGridEh_Ptzl->DataSource->DataSet->IsEmpty())
{
AnsiString strDesc = DBGridEh_Ptzl->DataSource->DataSet->FieldByName("wtztmc")->AsString;

if(State.Contains(Gridseh::gdSelected))
{
DBGridEh_Ptzl->Canvas->Brush->Color = (TColor)(255 * 256 * 256 + 208 * 256 + 100);
}
else if(strDesc == "全部成交")
{
DBGridEh_Ptzl->Canvas->Brush->Color = (TColor)(180 * 256 * 256 + 255 * 256 + 180);
}
else if(strDesc == "部成部撤")
{
DBGridEh_Ptzl->Canvas->Brush->Color = (TColor)(180 * 256 * 256 + 255 * 256 + 255);
}
else if (strDesc == "撤销")
{
DBGridEh_Ptzl->Canvas->Brush->Color = (TColor)(200 * 256 * 256 + 200 * 256 + 255);
}
else
{
DBGridEh_Ptzl->Canvas->Brush->Color = (TColor)(255 * 256 * 256 + 255 * 256 + 255);
}

AnsiString strName = DBGridEh_Ptzl->DataSource->DataSet->FieldByName("mmlbmc")->AsString;

if((strName.Pos("买") > 0)
|| (strName.Pos("申购") > 0)
|| (strName.Pos("解押") > 0)
|| (strName.Pos("融资") > 0)
|| (strName.Pos("合并") > 0)
|| (strName.Pos("盲合") > 0)
|| (strName.Pos("认购") > 0))
{
DBGridEh_Ptzl->Canvas->Font->Color = clRed;
}
else if ((strName.Pos("卖") > 0)
|| (strName.Pos("赎回") > 0)
|| (strName.Pos("质押") > 0)
|| (strName.Pos("融券") > 0)
|| (strName.Pos("拆分") > 0)
|| (strName.Pos("盲拆") > 0)
|| (strName == "转股")
|| (strName == "回售"))
{
DBGridEh_Ptzl->Canvas->Font->Color = clGreen;
}
else
{
DBGridEh_Ptzl->Canvas->Font->Color = (TColor)(0 * 256 * 256 + 0 * 256 + 0);
}

DBGridEh_Ptzl->DefaultDrawColumnCell(Rect, DataCol, Column, State);

if(Column->Index == 17)
{
double percent = DBGridEh_Ptzl->DataSource->DataSet->FieldByName("CJBL")->AsVariant;

TRect &ProgressRect = const_cast<TRect&>(Rect);

ProgressRect.Top = Rect.Top;
ProgressRect.Left = Rect.Left ;
ProgressRect.Right = Rect.Left + (Rect.Right - Rect.Left) * (percent / 100);
ProgressRect.Bottom = Rect.Bottom;

DBGridEh_Ptzl->Canvas->Brush->Color = clLime;
DBGridEh_Ptzl->Canvas->Font->Color = clLime;
DBGridEh_Ptzl->DefaultDrawColumnCell(ProgressRect, DataCol, Column, State);

AnsiString str = FormatFloat("#,##0.00", percent) + "%";

DBGridEh_Ptzl->Canvas->Brush->Style = bsClear;
DBGridEh_Ptzl->Canvas->Font->Color = clRed;
DBGridEh_Ptzl->Canvas->TextOut(Rect.Left, Rect.Top + 1, str);
}
else if(Column->Index == 18)
{
double percent = DBGridEh_Ptzl->DataSource->DataSet->FieldByName("WCBL")->AsVariant;

TRect &ProgressRect = const_cast<TRect&>(Rect);

ProgressRect.Top = Rect.Top;
ProgressRect.Left = Rect.Left ;
ProgressRect.Right = Rect.Left + (Rect.Right - Rect.Left) * (percent / 100);
ProgressRect.Bottom = Rect.Bottom;

DBGridEh_Ptzl->Canvas->Brush->Color = clLime;
DBGridEh_Ptzl->Canvas->Font->Color = clLime;
DBGridEh_Ptzl->DefaultDrawColumnCell(ProgressRect, DataCol, Column, State);

AnsiString str = FormatFloat("#,##0.00", percent) + "%";

DBGridEh_Ptzl->Canvas->Brush->Style = bsClear;
DBGridEh_Ptzl->Canvas->Font->Color = clRed;
DBGridEh_Ptzl->Canvas->TextOut(Rect.Left, Rect.Top + 1, str);
}
else if(Column->Index == 19)
{
double percent = DBGridEh_Ptzl->DataSource->DataSet->FieldByName("ZXBL")->AsVariant;

DBGridEh_Ptzl->DefaultDrawColumnCell(Rect, DataCol, Column, State);
TRect &ProgressRect = const_cast<TRect&>(Rect);

ProgressRect.Top = Rect.Top;
ProgressRect.Left = Rect.Left ;
ProgressRect.Right = Rect.Left + (Rect.Right - Rect.Left) * (percent / 100);
ProgressRect.Bottom = Rect.Bottom;

DBGridEh_Ptzl->Canvas->Brush->Color = clLime;
DBGridEh_Ptzl->Canvas->Font->Color = clLime;
DBGridEh_Ptzl->DefaultDrawColumnCell(ProgressRect, DataCol, Column, State);

AnsiString str = FormatFloat("#,##0.00", percent) + "%";

DBGridEh_Ptzl->Canvas->Brush->Style = bsClear;
DBGridEh_Ptzl->Canvas->Font->Color = clRed;
DBGridEh_Ptzl->Canvas->TextOut(Rect.Left, Rect.Top + 1, str);
}
}
}



请问有什么问题,怎么把原始数据隐藏
...全文
149 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2016-11-24
  • 打赏
  • 举报
回复
引用 6 楼 yuweiping5247 的回复:
[quote=引用 5 楼 u010165006 的回复:] 你之前有这句: DBGridEh_Ptzl->Canvas->Brush->Style = bsClear; 再设置一下Brush试试。
感觉应该可以,不过我已经用其他方法解决了[/quote] 有方法就分享一下?对论坛大家都好。
vfdn 2016-11-24
  • 打赏
  • 举报
回复
引用 5 楼 u010165006 的回复:
你之前有这句: DBGridEh_Ptzl->Canvas->Brush->Style = bsClear; 再设置一下Brush试试。
感觉应该可以,不过我已经用其他方法解决了
ooolinux 2016-11-22
  • 打赏
  • 举报
回复
TextOut之前用刷子FillRect。
ooolinux 2016-11-22
  • 打赏
  • 举报
回复
你之前有这句: DBGridEh_Ptzl->Canvas->Brush->Style = bsClear; 再设置一下Brush试试。
vfdn 2016-11-22
  • 打赏
  • 举报
回复
引用 3 楼 u010165006 的回复:
你FillRect代码怎么写的?
DBGridEh_Ptzl->Canvas->FillRect(Rect);
ooolinux 2016-11-22
  • 打赏
  • 举报
回复
你FillRect代码怎么写的?
vfdn 2016-11-22
  • 打赏
  • 举报
回复
引用 1 楼 u010165006 的回复:
TextOut之前用刷子FillRect。
试过,没效果

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧