procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin with TStringGrid(Sender).Canvas do begin Pen.Color := clRed; Brush.Style := bsClear; Rectangle(Rect); end; end;———————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 ————————————————————————————————————
字体颜色的实例,同时选中背景的颜色可以自定义,双击要选的网格 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, Grids, DBGrids,StdCtrls;type TForm1 = class(TForm) DBGrid1: TDBGrid; DataSource1: TDataSource; ADOQuery1: TADOQuery; Button1: TButton; procedure DBGrid1Enter(Sender: TObject); procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}function get_dbg_edit_text(dbgrid :tdbgrid):TEdit; var i:integer; begin result := nil; if not assigned(dbgrid) then exit; if not dbgrid.EditorMode then begin dbgrid.EditorMode:=true; dbgrid.EditorMode:=false; end; with dbgrid do for i:=0 to pred(componentcount) do if components[i] is Tcustomedit then begin result := tedit(components[i]); break; end;end;function get_dbg_edit(dbgrid : tdbgrid): string; var dbg_edit :TEdit; begin dbg_edit:=get_dbg_edit_text(dbgrid); if assigned(dbg_edit) then result := dbg_edit.text else result:=''; end;procedure TForm1.DBGrid1Enter(Sender: TObject); {显示当前编辑框背景颜色} var dbg_edit : tedit; begin dbg_edit:=get_dbg_edit_text(tdbgrid(sender)); if assigned(dbg_edit) then dbg_edit.color:=clyellow; end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin //DBGrid1DrawColumnCell事件。 //sex字段为女的,字体颜色为红色,其它的为蓝色: if Adoquery1.FieldByName('sex').Asstring = '女' then DBGrid1.Canvas.Font.Color := clRed else DBGrid1.Canvas.Font.Color := clBlue; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;end.
StringGrid1.Canvas.Pen.Color:=clRed;
StringGrid1.Canvas.MoveTo(rect.Left,rect.Top);
StringGrid1.Canvas.LineTo(rect.Left,rect.Bottom );
这只是一个例子,你可以试试!
Rect: TRect; State: TGridDrawState);
begin
with TStringGrid(Sender).Canvas do
begin
Pen.Color := clRed;
Brush.Style := bsClear;
Rectangle(Rect);
end;
end;————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids,StdCtrls;type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOQuery1: TADOQuery;
Button1: TButton;
procedure DBGrid1Enter(Sender: TObject);
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}function get_dbg_edit_text(dbgrid :tdbgrid):TEdit;
var i:integer;
begin
result := nil;
if not assigned(dbgrid) then exit;
if not dbgrid.EditorMode then
begin
dbgrid.EditorMode:=true;
dbgrid.EditorMode:=false;
end;
with dbgrid do for i:=0 to pred(componentcount) do
if components[i] is Tcustomedit then
begin
result := tedit(components[i]);
break;
end;end;function get_dbg_edit(dbgrid : tdbgrid): string;
var
dbg_edit :TEdit;
begin
dbg_edit:=get_dbg_edit_text(dbgrid);
if assigned(dbg_edit) then
result := dbg_edit.text
else result:='';
end;procedure TForm1.DBGrid1Enter(Sender: TObject);
{显示当前编辑框背景颜色}
var
dbg_edit : tedit;
begin
dbg_edit:=get_dbg_edit_text(tdbgrid(sender));
if assigned(dbg_edit) then dbg_edit.color:=clyellow;
end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
//DBGrid1DrawColumnCell事件。
//sex字段为女的,字体颜色为红色,其它的为蓝色:
if Adoquery1.FieldByName('sex').Asstring = '女' then
DBGrid1.Canvas.Font.Color := clRed
else
DBGrid1.Canvas.Font.Color := clBlue;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;end.
你的办法实际上是在Rect的四周画上了4条线,这样和指定FrameRect的Pen是一样的。在中间会有一条很细的白线。
不好意思,你的方法是框线加粗了。lxpbuaa(桂枝香在故国晚秋) :
你的方法是每个cell的中间会出现一条细白线
StringGrid1.Canvas.Pen.Color:=clRed;
StringGrid1.Canvas.MoveTo(rect.Left-1,rect.Top);
StringGrid1.Canvas.LineTo(rect.Left-1,rect.Bottom );
这只是一个例子,你可以试试!