procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
row,col,maxcol,i,j:integer;
r,oldr:Trect;
begin
stringgrid1.MouseToCell(x,y,col,row); //取得鼠标指向哪个cell
if (col = oldcol) and (row = oldrow) then Exit;
maxcol := stringgrid1.ColCount-1;
with StringGrid1.Canvas do
begin
for i := 0 to maxcol do //当前cell所在行变色
begin
Brush.Color:=clRed ;
r:= stringgrid1.CellRect(i,row);
FillRect(r);
DrawText(Handle,PAnsiChar(StringGrid1.Cols[i][row]),
-1,r,DT_CENTER or DT_WORD_ELLIPSIS);
end;
sleep(100) ;
if (oldcol=-1) and (oldrow=-1) then
begin
oldcol := col;
oldrow := row;
exit;
end;
for j := 0 to maxcol do //恢复上次改变的颜色
begin
Brush.Color:=clWhite;
oldr:= stringgrid1.CellRect(j,oldrow);
FillRect(oldr);
DrawText(Handle,PAnsiChar(StringGrid1.Cols[j][oldrow]),
-1,oldr,DT_CENTER or DT_WORD_ELLIPSIS);
end;
end;
oldcol := col;
oldrow := row;
end;
其中oldcol和oldrow是定义的变量,初始值-1;
追问我用的是2010,DrawText(Handle,PAnsiChar(Grid.Cols[j][oldrow]),这里报错,没有cols这个属性额
追答我的也是2010哟,没得这个问题哟,测试通过,确实能实现你要的效果
property Cols[Index: Integer]: TStrings read GetCols write SetCols;
这个属性存在的哟
追问哦 那我再试试哈,先谢谢了。