En lo referente al tema del cambio de fuente, dejo este código orientativo en el que la fuente se cambia para la primera columna del grid desde la fila 1. Solo se cambia para los dos caracteres que aparezcan después del primer espacio aparecido en la celda:
Código Delphi
[-]
procedure PrintText(Canvas: TCanvas; Text: String; Rect: TRect);
var
OldAlign: cardinal;
FName: String;
n: integer;
begin
InflateRect(Rect, -1, -1);
Canvas.FillRect(Rect);
OldAlign:= SetTextAlign(Canvas.Handle, TA_UPDATECP or TA_RIGHT);
MoveToEx(Canvas.Handle, Rect.Right, Rect.Top, nil);
FName:= Canvas.Font.Name;
Canvas.Brush.Style:= bsClear;
n:= Pos(' ', Text)+1;
TextOut(Canvas.Handle, 0, 0, PCHAR(Copy(Text, n+2, Length(Text)-n-2)), Length(Text)-n-2);
Canvas.Font.Name:= 'Ravie';
TextOut(Canvas.Handle, 0, 0, PCHAR(Copy(Text, n, 2)), 2);
Canvas.Font.Name:= FName;
TextOut(Canvas.Handle, 0, 0, PCHAR(Copy(Text, 0, n-1)), n-1);
SetTextAlign(Canvas.Handle, OldAlign);
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Alin: integer;
begin
with Sender as TStringGrid do
begin
if ARow = 0 then
Alin:= DT_CENTER
else
Alin:= DT_RIGHT;
InflateRect(Rect, -1, -1);
Canvas.FillRect(Rect);
InflateRect(Rect, -3, -3);
if (ACol = 1) and (ARow <> 0) then
PrintText(Canvas, Cells[ACol, ARow], Rect)
else
DrawText(Canvas.Handle, PAnsiChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), Rect,
Alin or DT_VCENTER or DT_SINGLELINE);
end;
end;
Saludos.