如何设置TStringGrid某行的颜色
例如当StringGrid1.Cells[1,1]='10000'时StringGrid1的第二行正行底色显示红色
请大家帮帮忙
问题点数:50、回复次数:4Top
1 楼zhuangbx220(星)回复于 2005-11-21 19:52:55 得分 30
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
s: String;
R: TRect;
begin
if ARow = 3 then
begin
case ACol of
1: TStringGrid(Sender).Canvas.Brush.Color := clGreen;
2: TStringGrid(Sender).Canvas.Brush.Color := clRed;
3: TStringGrid(Sender).Canvas.Brush.Color := clYellow;
4: TStringGrid(Sender).Canvas.Brush.Color := clBlue;
end;
S := TStringGrid(Sender).Cells[ACol, ARow];
R := TStringGrid(Sender).CellRect(ACol, ARow);
TStringGrid(Sender).Canvas.FillRect(R);
TStringGrid(Sender).Canvas.TextOut(R.Left, R.Top, S);
end;
end;Top
2 楼yuehaiyang()回复于 2005-11-21 22:40:06 得分 0
学习Top
3 楼oushengfen(逸帆)回复于 2005-11-22 10:12:16 得分 0
谢谢,我正好需要此方法,但是本人还有一个就是需要在网格中进行编辑,但只能输入十六制的数字字符。Top
4 楼zxf_feng(阿日)回复于 2005-11-23 13:56:51 得分 20
procedure SetGridColor(ARow,ACol: Integer;ColorJ,ColorO: TColor; Rect: TRect;StrGrid: TStringGrid);
var
strValue: String;
begin
with StrGrid do
begin
//画背景
if (ARow > 0) and (ACol > 0) then
begin
if (ARow mod 2 = 0) then
Canvas.Brush.Color := ColorO
else
Canvas.Brush.Color := ColorJ;
if (ARow=StrGrid.Row) then Canvas.Brush.Color := clMoneyGreen;//clMenuHighlight;
Canvas.FillRect(Rect);
end;
//计算显示在矩形框中的左上角位置
strValue := Cells[ACol,ARow];
Canvas.Font := Font;
//在矩形框中写值
Canvas.TextRect(Rect,Rect.Left+5,Rect.Top+(Rect.Bottom-Rect.Top-Canvas.TextHeight(strValue)) div 2,strValue);
end;
end;
Top




