La Web del Programador: Comunidad de Programadores
 
    Pregunta:  12440 - COLORES EN STRINGGRID
Autor:  Tavinho OP
Hola amigos, estoy utilizando stringGrid para editar algunos campos númericos, y resulta que deseo que algunos montos de las celdas esten en diferentes colores de acuerdo a un rango y ademas resaltar la fila que se esta editando y pintar el fondo, ocultar y que solo sean de solo lectura las diferentes columnas.

muchas gracias por tu ayuda.
chau.

  Respuesta:  Luis Fernandez
Bajate las Librerias RXLib (hay para todas las versiones de Delphi) que son gratuitas y una pasada.En ellas hay un componente RXDBGrid con el que puedes hacer todo lo que quieres y mas con tres lines de programación.Yo las tengo pero creo mas etico que acudas a la página de sus autores. Suerte

  Respuesta:  Miguel Sandro Lucero
Para colorear celdas en StringGrid:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
dx: Integer;
begin
with (Sender as TStringGrid) do
begin
// Don't change color for first Column, first row
if (ACol = 0) or (ARow = 0) then
Canvas.Brush.Color := clBtnFace
else
begin
case ACol of
1: Canvas.Font.Color := clBlack;
2: Canvas.Font.Color := clBlue;
end;
// Draw the Band
if ARow mod 2 = 0 then
Canvas.Brush.Color := $00E1FFF9
else
Canvas.Brush.Color := $00FFEBDF;
Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]);
Canvas.FrameRect(Rect);
end;
end;
end;

Para hacer una columna de solo lectura:

(sacado de http://www.marteens.com/trick30.htm y adaptado para stringgrid)

procedure TForm1.Grid1EnterCell(Sender: TObject);
begin
if Grid1.Col = ElCampoSoloLectura then
Grid1.Options := Grid1.Options - [dgEditing]
else
Grid1.Options := Grid1.Options + [dgEditing];
end;