delphi为什么拖动stringgrid滚动条,数据和颜色就会部分消失
展开全部
你绘制单元格的代码有问题。
在Drawcell事件的时候,你可能是为绘制每个单元格触发的事件,如果这样的话,你的代码就属于比较糟的。
如果有类似 Canvas.TextOut(rect.left , rect.top, Cells[j, i]);代码,替换为
Canvas.TextRect(Rect,Rect.left,Rect.top,Cells[Acol,Arow]);这样的代码。
在Drawcell事件的时候,你可能是为绘制每个单元格触发的事件,如果这样的话,你的代码就属于比较糟的。
如果有类似 Canvas.TextOut(rect.left , rect.top, Cells[j, i]);代码,替换为
Canvas.TextRect(Rect,Rect.left,Rect.top,Cells[Acol,Arow]);这样的代码。
更多追问追答
追问
请问drewcell事件是怎么个触发的?是不是程序运行时它就开始画了?
追答
在form只有一个stringgrid控件的情况,以下是form的执行顺序:
1、form.create;含控件的初始化
2、form.show
3、form内控件的部分代码,此时,即使cell里没有数据,也要执行cell的drawcell
4、form.paint 可能和上面drawcell交替执行,因为drawcell也是paint,都是画
5、form.active
6、现在看见你的form
你试一下以下代码:颜色你可以改,我随便设的
procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with Sender as TStringGrid do
begin
if (ARow mod 2 =0) then
begin //偶数row
Canvas.Brush.Color := clYellow; //底色
Canvas.font.Color:=clRed; //字体颜色
end
else
begin
Canvas.Brush.Color := clBlue;
Canvas.font.Color := clYellow;
end;
Canvas.FillRect(Rect); //绘底色
canvas.textout(rect.Left,rect.Top,cells[Acol,ARow]); //output text
end;
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询