//使用DrawText方便一些
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
S: string;
begin
with TStringGrid(Sender) do
begin
S := Cells[ACol, ARow];
Canvas.FillRect(Rect);
DrawText(Canvas.Handle, PChar(S), Length(S), Rect,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
s: string;
w, h: integer;
begin
with StringGrid1 do
begin
s := Cells[ACol, ARow];
w := Canvas.TextWidth(s);
h := Canvas.TextHeight(s);
if (ACol <> 0) and (ARow <> 0) then
begin
if ACol mod 2 = 0 then
Canvas.Brush.Color := clYellow
else
Canvas.Brush.Color := clGreen;
Canvas.FillRect(Rect);
Canvas.TextOut((Rect.Right - Rect.Left - w) div 2, (Rect.Bottom - Rect.Top) div 2, s);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
r,c:integer;
begin
for r:=0 to stringgrid1.RowCount-1 do
for c:=0 to stringgrid1.ColCount-1 do
stringgrid1.Cells[c,r]:=inttostr(r)+' 行';
end;
procedure TForm1.stringgrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
area:trect;
begin
stringgrid1.Canvas.Font.Assign(stringgrid1.Font);
with stringgrid1,stringgrid1.Canvas do
begin
FillRect(Rect);
Area:= Rect;
InflateRect(Area, -2, -2);
if (arow=0) then
DrawText(Handle, PChar(Cells[ACol, ARow]),Length(Cells[ACol, ARow]), Area, DT_LEFT)
else if (arow=1) then
DrawText(Handle, PChar(Cells[ACol, ARow]),Length(Cells[ACol, ARow]), Area, DT_CENTER)
else if (arow<>1) then
DrawText(Handle, PChar(Cells[ACol, ARow]),Length(Cells[ACol, ARow]), Area, DT_RIGHT);
end;
end;