200分的问题,怎样把stringgrid里的某一个单元也就是单格染上颜色?(200分)

  • 主题发起人 主题发起人 babysheep
  • 开始时间 开始时间
B

babysheep

Unregistered / Unconfirmed
GUEST, unregistred user!
200分的问题,怎样把stringgrid里的某一个单元也就是单格染上颜色?
听说可以用画图工具,但是试了很久,没有成功,有没有一个具体的例子,马上送上200分。
 
以下是例子:
procedure TForm1.Button1Click(Sender: TObject);
var
x, i, j, w, h: integer;
rect1: TRect;
begin
i := 3; //列
j := 4; //行
w := 0;
h := 0;
for x := 0 to i-1 do
w := w + StringGrid1.ColWidths[x] + StringGrid1.GridLineWidth;
for x := 0 to j-1 do
h := h + StringGrid1.RowHeights[x] + StringGrid1.GridLineWidth;
with rect1 do
begin
Left := w;
Top := h;
Right := Left + StringGrid1.ColWidths + StringGrid1.GridLineWidth;
Bottom := Top + StringGrid1.RowHeights[j] + StringGrid1.GridLineWidth;
end;
StringGrid1.Canvas.Brush.Color := clRed;
StringGrid1.Canvas.FillRect(rect1);
end;
 
只要在 OnDrawCell 事件中,

TRect rect = Grid.CellRect[ACol, ARow];
Grid.Canvas.Brush.Color = <your_color>;
Grid.Canvas.FillRect(rect);

 
为什么我在button的onclick事件里面写同样的语句不行呢?
放在ondrawcell事件里面那个单元格会不停的闪动。
 
shaofun的程序好长,不过变成红色了,但是如果本来那个单元格写有字的话,就不能变红色?为什么?
 
两个程序都不能解决有字的时候显示红色的问题,怎么办呢?
 
你的问题好象不清楚。
单元格变色只要在OnDrawCell中处理,如果再加在
Grid.Canvas.Lock()..
Grid.Canvas.UnLock();或者相似的其它处理,是可以
消除闪烁的。

如果需要有更好的效果,从 TStringGrid/TDrawGrid/TCustomGrid 中派生吧。

如果有字,你不会反色处理一下么?Canvas.Font属性不可能不用的。

IF 判断不要我说吧。
 
procedure TForm1.FormActivate(Sender: TObject);
ddev,我要实现的功能是:当一个form被激活时,在stringgrid里面的某些单元格写上文字,然后,
有需要的地方改颜色,比如说,当超支时就会显示红色。文字是黑色,背景色是红色,或者文字是
红色也行。我用你的方法试了很久,但是没有达到效果,可能是我不大会用,我把主要代码贴出来。
希望你能指正,谢谢。
begin
s.Cells[1,1]:='hi';
end;

procedure TForm1.sDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
rect:=s.CellRect(1, 1);
s.Canvas.Font.Color:=clblack;
s.Canvas.Brush.Color := clred;
s.Canvas.FillRect(rect);
end;

对不起,麻烦你了。
 
多人接受答案了。
 
多人接受答案了。
 
后退
顶部