TstringGrid(20分)

  • 主题发起人 主题发起人 张远
  • 开始时间 开始时间

张远

Unregistered / Unconfirmed
GUEST, unregistred user!
如何改变指定行的字体或颜色?
 
好象只能用CELLRECT来改吧.
 
很容易的只要在TStringGrid的OnDrawCell事件加入字体和颜色的处理函数就行了。
同时判断ACol或ARow是否是指定的行或列就可以了。
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if ARow=2 then
with Canvas do
begin
ImageList1.Draw(StringGrid1.Canvas,Rect.Left,Rect.Top,0);
end;
end;
上述代码用于在指定的行的每个栅各中绘制一个图形。
 
用stirnggrid1.canvas.font.style:=fsBold;
stirnggrid1.canvas.brush.color:=clred;
stirnggrid1.canvas.textout();
即可
 
procedure Tfrm_dytjmxhsjs.DBGrid_mxDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
* dbgrid_mx.canvas.brush.color:=clyellow;
* dbgrid_mx.Canvas.Font.Color := clred
* dbgrid_mx.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
触发stringgrid的ondrawcolumncell.
dbgrid同样有此方法。
如上例,窗体为frm_dytjmxhsjs,
dbgrid名为dbgrid_mx.
只须把上面程序中带有*号的三行程序加上即可。
 
TStringGrid与TDBGrid不尽相同.

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
with StringGrid1.Canvas do
begin
if ARow=StringGrid1.Row then //判断是否为当前行,也可以任意制定行
begin
Brush.Color:=clYellow;
Font.Color:=clRed;
Font.Style:=[fsBold,fsItalic];
end
else
begin
Brush.Color:=clWhite;
Font.Color:=clBlack;
end;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+3,StringGrid1.Cells[ACol,ARow]);
end;
end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
StringGrid1.Repaint; //由于DrawCell事件每次只画一个(我的试验结果),在此强制刷新
end;
 
多人接受答案了。
 
后退
顶部