这个代码可以实现StringGird里的数据自动换行,并隔行显示不同的颜色,但是出现了死循环,导致cpu全占用,如何该呢? if (State.Contains(gdFixed))
return ;
if(ARow %2==0)
{//变色
sg1->Canvas->Brush->Color=clSkyBlue;
}
//if (ACol != 4)
// return ; AnsiString s = sg1->Cells[ACol][ARow];
if (s.Length() == 0)
return ;
TRect r; sg1->Canvas->FillRect(Rect); int q = DrawText(sg1->Canvas->Handle, s.c_str(), s.Length(), &Rect, DT_WORDBREAK); // 自动换行
sg1->RowHeights[ARow] = q + 5;
return ;
if(ARow %2==0)
{//变色
sg1->Canvas->Brush->Color=clSkyBlue;
}
//if (ACol != 4)
// return ; AnsiString s = sg1->Cells[ACol][ARow];
if (s.Length() == 0)
return ;
TRect r; sg1->Canvas->FillRect(Rect); int q = DrawText(sg1->Canvas->Handle, s.c_str(), s.Length(), &Rect, DT_WORDBREAK); // 自动换行
sg1->RowHeights[ARow] = q + 5;
解决方案 »
- 模仿SQL的导入导出
- 如何关闭AcroPDF打开的文件?
- Turobo Delphi等系列支持移动开发么
- 求正中的SkinEngine3.4.7控件包
- dll里的MDI的相关问题
- richtext
- 如何在DBGRID中欠入checkbox和RadioButton(小弟现在没多少分了,请大家不见怪)
- 很难的记录类型问题!大家快快快!
- 控件的写法请教,我新控件由3个控件组合而成,但是控件间的相互通讯成了问题,如何向其他的单元发送消息呢,比如当点击某个控件其他两个, 同时响应这个消息
- 请问大侠们何为Activex,MIDAS
- ServerSocket心跳包检测socket链路中断问题
- Delphi 调用GOOGLE MAP API
这个导致重绘,结果就是cpu全占用
另外, sg1->RowHeights[ARow] = q + 5;
不能完全起到你想要的作用,因为你设置row的height时取的是最新的row的所有字的高度+5,但是可能这一row的前几列的高度比这个大。会截断前面的高度。另外,不是很清楚,drawcell哪些事件会触发它,哪位指点一下。还有gdstate=gdfixed是什么状态,另外两种容易理解
另外, sg1->RowHeights[ARow] = q + 5;
不能完全起到你想要的作用,因为你设置row的height时取的是最新的row的所有字的高度+5,但是可能这一row的前几列的高度比这个大。会截断前面的高度。 另外,不是很清楚,drawcell哪些事件会触发它,哪位指点一下。 还有gdstate=gdfixed是什么状态,另外两种容易理解
------------------------------------------------------
我这里doublebuffered=true,还是闪烁,gdfixed就是标头的样式
这样算不算更改了rect的高度?不过我这里没效果哦
而且在我电脑上,输入前几个cell的时候是没有问题,每当到第4,5个cell时闪烁了。用了InvalidateRect(sg1->Canvas->Handle, &Rect, False);也没用
他这个是个死循环
sg1->RowHeights[ARow] = q + 5;
你每次改边,StringGrid 都会重绘,你每次都在改变高度,他就不停在绘
另外看不懂C++的代码,手头上只有Delphi的
双缓冲打开也是闪地。奇怪第一次我试的时候不曾闪过,忘了是哪里设置了一下。
他这个每次都是在不停地改变高度,STRINGGRID每次都会重绘,如此循环
太奇怪了!!!!!!
sg1->RowHeights[ARow] = q + 5;会使程序陷入死循环!