frmlook.strgrdbeformodify.Canvas.FillRect(frmlook.strgrdbeformodify.CellRect(i+1,k));
frmlook.strgrdbeformodify.Canvas.Brush.Color:=clred;
frmlook.strgrdbeformodify.Canvas.Font.Color:=clred ;
frmlook.strgrdbeformodify.Cells[i+1,k] := nodeList[i].NodeValue;
frmlook.strgrdbeformodify.Canvas.TextOut(frmlook.strgrdbeformodify.CellRect(i+1,k).Left,frmlook.strgrdbeformodify.CellRect(i+1,k).Top,frmlook.strgrdbeformodify.cells[i+1,k]);
以上是我的代码.我这样设置了,为什么逐步调试的时候是可以的,当全部调试完后又还原了,没有颜色了.
我在论坛上也看到了些类似问题的解答,似乎都是千遍一律的如下:
type
TStringGridEx = class(TStringGrid);
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if not ((ACol = 2) and (ARow = 2)) then Exit;
TStringGridEx(Sender).OnDrawCell := nil;
try
TStringGridEx(Sender).Canvas.Font.Color := clRed;
TStringGridEx(Sender).Canvas.Brush.Color := clYellow;
TStringGridEx(Sender).Canvas.Font.Name := '黑体';
TStringGridEx(Sender).Canvas.Font.Size := 16;
TStringGridEx(Sender).DrawCell(ACol, ARow, Rect, State);
finally
TStringGridEx(Sender).OnDrawCell := StringGrid1DrawCell;
end;
end;
可我要设置的是不确定的单元格我是要根据对比后显示不同的数据颜色,因此至于那个单元格是不确定的,而他这是固定的.
frmlook.strgrdbeformodify.Canvas.Brush.Color:=clred;
frmlook.strgrdbeformodify.Canvas.Font.Color:=clred ;
frmlook.strgrdbeformodify.Cells[i+1,k] := nodeList[i].NodeValue;
frmlook.strgrdbeformodify.Canvas.TextOut(frmlook.strgrdbeformodify.CellRect(i+1,k).Left,frmlook.strgrdbeformodify.CellRect(i+1,k).Top,frmlook.strgrdbeformodify.cells[i+1,k]);
以上是我的代码.我这样设置了,为什么逐步调试的时候是可以的,当全部调试完后又还原了,没有颜色了.
我在论坛上也看到了些类似问题的解答,似乎都是千遍一律的如下:
type
TStringGridEx = class(TStringGrid);
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if not ((ACol = 2) and (ARow = 2)) then Exit;
TStringGridEx(Sender).OnDrawCell := nil;
try
TStringGridEx(Sender).Canvas.Font.Color := clRed;
TStringGridEx(Sender).Canvas.Brush.Color := clYellow;
TStringGridEx(Sender).Canvas.Font.Name := '黑体';
TStringGridEx(Sender).Canvas.Font.Size := 16;
TStringGridEx(Sender).DrawCell(ACol, ARow, Rect, State);
finally
TStringGridEx(Sender).OnDrawCell := StringGrid1DrawCell;
end;
end;
可我要设置的是不确定的单元格我是要根据对比后显示不同的数据颜色,因此至于那个单元格是不确定的,而他这是固定的.
解决方案 »
- 怎样用idhttpserver代替IIS
- mysql查表问题
- excel的问题还是微软的问题啊?
- 请问TTcpServer怎么向TTcpClint发信息?,为什么D7的TClintSocket和TServerSocket都不见了?
- 如何获得某个目录下面的所有文件名称
- 就这点分了。如何在DELPHI里面实现RPC呢?或者通过网络传递对象?
- 很菜的问题啊,呵呵
- http://www.csdn.net/cnshare/soft/10/10319.shtm请各位指教!在此散分!希望多提意见!
- 一对多数据连接,用Table?用Query?各自的优点?
- 关于dbgrid与table绑定问题。
- 帮把易语言代码译成DELPHI
- Delphi 批量更新有问题 ApplyUpdates (少用) ,各位高手请看下代码!
var
i,j,m,n:Integer;
s:string;
rect:TRect;
begin
i:=self.StringGrid1.RowCount;
m:=self.StringGrid1.ColCount;
for j:=1 to i-1 do
begin
for n:=1 to m do
begin
rect:=self.StringGrid1.CellRect(n,j);
s:=self.StringGrid1.Cells[n,j];
if s='√' then
begin
self.StringGrid1.Canvas.Font.Color:=clBlue
end
else
self.StringGrid1.Canvas.Font.Color:=clRed;
Self.StringGrid1.Canvas.TextOut(rect.Left+1,rect.Top+1,s);
end;
end;
end;
if not ((ACol = 2) and (ARow = 2)) then Exit;
将上面的改为
if not ((ACol = StringGrid1.Col) and (ARow = StringGrid1.Row)) then Exit;
这样就判断当前StringGrid1选中大单元格,然你可以继续加进一些判断
在下面的事件中写代码如下:
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with (Sender as TStringGrid) do
if not (ACol=Acol) and (ARow=Aro) then//你要改变的单元格
begin
Canvas.FillRect(Rect);
Canvas.Font.Color:=clred;//字体颜色
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
end;
end;这样设置改变最后一个改变的字段的颜色,这是何解?
procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
i:integer;
begin
i:=self.vg_cells.index('['+inttostr(acol)+']['+inttostr(arow)+']')
if i>=0 then//属于内容改变的单元格
begin
Canvas.FillRect(Rect);
Canvas.Font.Color:=clred;//字体颜色
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
end;
end;
你用一个二维数组来模拟Grid,把对比的结果保存在数组中,后然在StringGrid1DrawCell函数中改变字体
跟踪一下ACol,ARo
还有你的Acol和DrawCell事件中的参数ACol重名了哦