Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Como Pintar Solo la Celda y No Toda la Columna de la Celda de un dbGrid??

Como Pintar Solo la Celda y No Toda la Columna de la Celda de un dbGrid??

Lo que pasa es que quiero cambiar de fondo una Celda uso el siguiente código:
Código Delphi [-]
procedure TfFacturas.gridFacDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
{ gdSelected
   gdFocused }
  if not PVentaCheck then
    if (Column.Index = 3) and (State = [gdSelected]) then begin
      //Pintar el Color de la Letra
      gridFac.Canvas.Font.Color := clBlack;    
      //Pintar el Fondo de la Celda
      gridFac.Canvas.Brush.Color := clSilver;
      gridFac.DefaultDrawColumnCell(rect,DataCol,Column,State);
    end;
end;

Con el código de arriba no me pinta nada aun así si esta seleccionada la Celda No. 3, El problema es que si le quito el Tipo de Estado "State = []" si me lo colorea pero a parte si abro un nuevo registro me pinta la celda del Nuevo registro de la misma Celda por lo que lo unico que quiero es que no me pinte nada abajo siempre y cuando se cumpla la condicion if not PVentaCheck then.

Espero me haya Explicado.
Cualquier sugerencia se los agradezco.
Responder Con Cita
  #2  
Antiguo 13-11-2004
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Tal vez esto pueda ayudar

Cambia en donde compara el estado el '='por 'in'. mira en el codigo abajo

Código Delphi [-]
procedure TfFacturas.gridFacDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
{ gdSelected
   gdFocused }
  if not PVentaCheck then
    if (Column.Index = 3)and (gdSelected in State)then begin
      //Pintar el Color de la Letra
      gridFac.Canvas.Font.Color := clBlack;   
      //Pintar el Fondo de la Celda
      gridFac.Canvas.Brush.Color := clSilver;
      gridFac.DefaultDrawColumnCell(rect,DataCol,Column,State);
    end;
end;
Responder Con Cita
  #3  
Antiguo 13-11-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
No me Funciona

Gracias por su respuesta, pero no me funcionó, trato de poner
(Column.Index = 4) a (Column.Index = 3) para que me coloree la Columna #3 pero en vez de colorearme se mueve la Celda, si no hago esta misma asignación me colorea la columna #4 en vez de la #3 y si me colorea la #4 al abrir un nuevo registro se quita el Color, en fin es un desastre.

Que tenga buen día.
Responder Con Cita
  #4  
Antiguo 14-11-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Si quieres que el pintado afecte sólo a las filas que satisfagan una condición entonces esta condición debe de alguna manera depender de la fila. En tu código PVentaCheck o es falso o es verdadero para todas las filas así que, o se pintan todas las celdas de la columna o no se pinta ninguna.

// Saludos
Responder Con Cita
  #5  
Antiguo 15-11-2004
mfcorral mfcorral is offline
Registrado
 
Registrado: nov 2004
Posts: 3
Poder: 0
mfcorral Va por buen camino
COlorear DBGridColumn

Prueba lo siguiente

if DataCol = 0 then //Index de la columna que quieres colorear
begin
DBGrid1.Canvas.Brush.Color := clBlue; //Color de fondo
FillRect(DBGrid1.Canvas.Handle, Rect, DBGrid1.Canvas.Brush.Handle);
DBGrid1.Canvas.Font.Color := clRed; //Color de fuente
DBGrid1.Canvas.TextOut(Rect.left + 2, Rect.top + 2, Column.Field.AsString);
end;
Responder Con Cita
  #6  
Antiguo 15-11-2004
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Código Delphi [-]
 if not PVentaCheck then 
    if (Column.Index = 3) and (State=[]) then begin
      gridFac.Canvas.Brush.Color := clBlue; //Color de fondo
      FillRect(gridFac.Canvas.Handle, Rect, gridFac.Canvas.Brush.Handle);
      gridFac.Canvas.Font.Color := clRed; //Color de fuente
      gridFac.Canvas.TextOut(Rect.left + 2, Rect.top + 2, Column.Field.AsString);
      PVentaCheck:=true;
    end;

Cambie el Estado de la Celda y el número de Columna que quiero que me cambie de Color, Agregue el Código que me proporciono MFCORRAL para pintar la Celda Si me funciona Corrrectamente pero si abro un Nuevo registro me la DESPINTA y vuelve a su estado normal, es lo que quiero evitar que haga eso, quiero que quede el Color que le pongo al cumplirse la condición, siendo que la condicion la hago en el evento OnColExit de la Columna #3.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 07:01:11.


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