创建一个LABEL1,使它的PARENT为一个DRAWGRID,并指定它在DRAWGRID中的栅格位置(3,1),但运行后若拉动DRAWGRID的滚动条,出现这样一个现象:这个LABEL1“滚”过的地方留下了LABEL1的痕迹。看上去好象DRAWGRID已无法定位它的栅格,怎样解决此问题?procedure tform1.create();
var
rect:trect;
label1:tlabel;
begin
rect:=drawgrid1.CellRect(3,1);
label1:=tlabel.create(self);
label1.Parent:=drawgrid1;
label1.caption:='aaaa' ;
label1.left:=rect.Left;
label1.top:=rect.Top;
end;
var
rect:trect;
label1:tlabel;
begin
rect:=drawgrid1.CellRect(3,1);
label1:=tlabel.create(self);
label1.Parent:=drawgrid1;
label1.caption:='aaaa' ;
label1.left:=rect.Left;
label1.top:=rect.Top;
end;
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
I,J:integer;
begin
if ((ACol mod 4) <>0) and (ARow mod 4 <>0) then
begin
i:=((ARow mod 4)-1) * 3 + (ACol mod 4) - 1;
ImageList1.Draw(DG_Table.canvas,Rect.left,rect.top,i);
end; if ((ACol mod 4 = 2 ) and (ARow mod 4 = 0)) then
begin
J:=(ARow div 4)*3;
case ACol of
2 : J:=J + 1;
6 : J:=J + 2;
10: J:=J + 3;
end;//case
//DG_Table.Canvas.TextOut(ACol*50+20,ARow*50+20,IntToStr(J));
DG_Table.Canvas.TextRect(Rect,ACol*50+20,ARow*50+20,IntToStr(J));
end;end;
你的那段写文字的代码我不是很明白,我随便试了一句
DG_Table.Canvas.TextOut(rect.Left,rect.Top,IntToStr(J));好像没发生你说的那个问题,不明白你为何直接用行号或列号来进行计算。
。不过经过这段时间的摸索,发现:只要你把要写或画东西的代码写在DrawCell事件中,不管怎么滚动或变换窗体,程序都会触发这个事件,帮你重绘需要重绘的栅格。