Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-08-2008
Avatar de Nomad
Nomad Nomad is offline
Miembro
 
Registrado: abr 2007
Ubicación: Sarchi,Costa Rica
Posts: 107
Poder: 18
Nomad Va por buen camino
Smile Pintar celda especifica de un stringrid

Hola

la verdad ya revisé los post que hay en el foro sobre como cambiar los colores en un stringgrid, y tambien busqué en internet y todo usan practicamente el mismo codigo y lo meten en el evento OnDrawCell del stringrid

Pero a mi eso no me sirve y he tratado de cambiar esos ejemplos a mis necesidades y no he podido, asi que les agradecería cualquier comentario o ayuda que puedan darme.

Yo lo que necesito es cuando estoy llenando el stringgrid, depediendo de lo que estoy poniendo ahi, entonces cambiarle el color o por los menos poder resaltar el tipo de letras.

Gracias de antemanos y saludos

Nomad
__________________
Quisiera cambiar el mundo, pero no me dan el código fuente.
Responder Con Cita
  #2  
Antiguo 13-08-2008
Avatar de Nomad
Nomad Nomad is offline
Miembro
 
Registrado: abr 2007
Ubicación: Sarchi,Costa Rica
Posts: 107
Poder: 18
Nomad Va por buen camino
Vean lo que se me ocurrió, aunque aún no funciona, creo que estoy bastante cerca, asi que cualquier ayuda o sugerencia es bien recibida.

Lo que hice fue que dentro del procedimiento OnDrawCell ingrese una variable boolean y puse una condicion, en la cual, si la variable es true, entonces debe cambiar el estilo por negrita.

Busque la variable PINTAR en el codigo:
Código Delphi [-]
procedure TFDistri.GrDetalleDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  sTexto: String;           // Texto que va a imprimir en la celda actual
  Alineacion: TAlignment;   // Alineación que le vamos a dar al texto
  iAnchoTexto: Integer;     // Ancho del texto a imprimir en pixels
begin
with GrDetalle.Canvas do
  begin
    // Lo primero es coger la fuente por defecto que le hemos asignado al componente
    Font.Name := GrDetalle.Font.Name;
    Font.Size := GrDetalle.Font.Size;
    if ARow = 0 then
      Alineacion := taCenter
    else
      // Si es la columna del importe pendiente alineamos el texto a la derecha
      if ACol = 4 then
        Alineacion := taRightJustify
      else
        Alineacion := taLeftJustify;

    // ¿Es una celda fija de sólo lectura?
    if gdFixed in State then
    begin
      Brush.Color := clNavy;      // le ponemos azul de fondo
      Font.Color := clWhite;      // fuente blanca
      Font.Style := [fsBold];     // y negrita
    end
    else
    if  pintar then
    begin
       Font.Style := [fsBold];     // negrita
    end;
    sTexto := GrDetalle.Cells[ACol,ARow];
    FillRect( Rect );
    iAnchoTexto := TextWidth( sTexto );
    case Alineacion of
      taLeftJustify: TextOut( Rect.Left + 5, Rect.Top + 2, sTexto );
      taCenter: TextOut( Rect.Left + ( ( Rect.Right - Rect.Left ) - iAnchoTexto ) div 2, Rect.Top + 2, sTexto );
      taRightJustify: TextOut( Rect.Right - iAnchoTexto - 2, Rect.Top + 2, sTexto );
    end;
  end;
end;

Luego lo que hice donde mando escribir el valor en la celda, puse la variable variable pintar = true, escribo el valor y luego pongo pintar = false.

Código Delphi [-]
pintar := true;
GrDetalle.Cells[col+2,memfila] := IntToStr(Suma);
pintar := false;

Pero el problema es que algo no estoy haciendo bien, porque siempre llega la variable PINTAR en false. y si quito la parte donde dice pintar = false, me pone todos las celdas en negrita.

Gracias por la ayuda...
__________________
Quisiera cambiar el mundo, pero no me dan el código fuente.
Responder Con Cita
  #3  
Antiguo 14-08-2008
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.281
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Échale un vistazo a mi página web. En la sección de ejemplos hay uno sobre StringGrid; No es expreso de pintar celdas, pero incluye el código para hacerlo.

Descargalo y échale un vistazo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 14-08-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Nomad, tu dices que quieres pintar una celda de acuerdo al valor que escriba en dicha celda, entonces debes preguntar dentro del evento OnDrawCell directamente por ese valor y dependiendo del balor pintas, ejemplo

Si se escrito un 1 en la celda, se pinta de rojo y se pone en negrita.
Código Delphi [-]
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 if (StringGrid1.Cells[ACol,ARow]='1') and (ACol=4) then
  begin
   //Pintamos la celda de rojo
   StringGrid1.Canvas.Brush.Color := clRed;
   StringGrid1.Canvas.FillRect(Rect);
 
   //ponemos en negrita el texto
   StringGrid1.Canvas.Font.Style := [fsBold];
   DrawText(StringGrid1.Canvas.Handle,PChar(StringGrid1.Cells[Acol,ARow]),-1, Rect, DT_LEFT);
  end;
end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 14-08-2008
Avatar de Nomad
Nomad Nomad is offline
Miembro
 
Registrado: abr 2007
Ubicación: Sarchi,Costa Rica
Posts: 107
Poder: 18
Nomad Va por buen camino
Cool problem

Ese es el problema, que ese valor no es el mismo siempre, ni se en cual celda cayó, asi que por lo tanto es dificil saber porque debe preguntar.
__________________
Quisiera cambiar el mundo, pero no me dan el código fuente.
Responder Con Cita
  #6  
Antiguo 14-08-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Se me ocurre que utilices la propiedad Objects del TStringGrid. Asi cuando asignes la propiedad Cells, tambies asignas la propiedad Objects.

Por ejemplo:
Código Delphi [-]
// Si queremos pintarla
GrDetalle.Objects[col+2,memfila] := Pointer(1);
// Y si no quieres pintarlas
GrDetalle.Objects[col+2,memfila] := Pointer(0);

GrDetalle.Cells[col+2,memfila] := IntToStr(Suma);

Luego en el evento OnDrawCell comprueba la propiedad Object de esa celda:
Código Delphi [-]
if  GrDetalle.Objects[ACol,ARow] = Pointer(1)  then
  begin
    Font.Style := [fsBold];     // negrita
  end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pintar celda de un StringGrid huevozen C++ Builder 1 31-08-2006 17:00:19
pintar una celda... eli.vidal Impresión 1 14-11-2005 16:31:27
pintar una celda... eli.vidal Gráficos 1 14-11-2005 16:30:49
Como Pintar Solo la Celda y No Toda la Columna de la Celda de un dbGrid?? AGAG4 Varios 11 15-11-2004 20:53:28
Imagen en celda especifica de Grilla mosorio OOP 4 02-06-2003 11:57:11


La franja horaria es GMT +2. Ahora son las 17:16:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi