Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2006
Avatar de kovaski
kovaski kovaski is offline
Miembro
 
Registrado: oct 2006
Ubicación: Valencia
Posts: 39
Poder: 0
kovaski Va por buen camino
Question Como cambiar el color de una fila del Grid de ibobjects

Hola.


Llevo dandole vueltas a este tema y no hay manera .

en grid normales tengo el siguiente codigo en OnDrawColumCell para cambiar el color de una fila entera:
Código Delphi [-]
       if Column.Field.Dataset.FieldbyName('ESTADO').AsString = 'Seguimiento' then
       if (gdFocused in State)
        then jvdbultimGrid1.canvas.brush.color := clBlack
        else jvdbultimGrid1.canvas.brush.color := $00D5FFFF;

y este para una sola celda en el mismo evento:

Código Delphi [-]
      if State=[] then
    with jvDBUltimGrid1 do 
     begin
      if Column.index=0 then
       begin
        if Column.Field.AsString= 'Activo' then
          Canvas.Brush.Color := $0084FF84;
        end;
   End;

En el ib_Grid del ibobjects tengo estos dos eventos OnDrawCell:
Código Delphi [-]
procedure IB_Grid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);

y OnDrawFocusedCell:
Código Delphi [-]
procedure TFichaOfertas.IB_Grid1DrawFocusedCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);

Estos eventos no tienen la propiedad colums de los demas grid y sé que la clave tiene que estar en "acol" y "aRow" pero por más que le doy vueltas no encuentro el codigo correcto que me pìnte la fila selecciona.

Os agradezco vuestra ayuda. Un saludo...
Responder Con Cita
  #2  
Antiguo 12-10-2006
jacqueline jacqueline is offline
Registrado
 
Registrado: oct 2006
Posts: 1
Poder: 0
jacqueline Va por buen camino
hola coo te encuentras
Responder Con Cita
  #3  
Antiguo 12-10-2006
Avatar de Lonidas
Lonidas Lonidas is offline
Miembro
 
Registrado: abr 2006
Posts: 35
Poder: 0
Lonidas Va por buen camino
Puede ser algo como esto lo que quieres hacer
Es para pintar toda una fila..

Código Delphi [-]
procedure IB_Grid1DrawCell(Sender: TObject; ACol,  ARow: Integer; Rect: TRect; State: TGridDrawState);
If  Arow = 1  then         // colocas el numero de la fila que deseas pintar
  IB_Grid1. Canvas.Brush.Color := $0084FF84;

Última edición por Lonidas fecha: 12-10-2006 a las 14:59:40.
Responder Con Cita
  #4  
Antiguo 12-10-2006
Avatar de kovaski
kovaski kovaski is offline
Miembro
 
Registrado: oct 2006
Ubicación: Valencia
Posts: 39
Poder: 0
kovaski Va por buen camino
Cita:
Empezado por Lonidas
Puede ser algo como esto lo que quieres hacer
Es para pintar toda una fila..

Código Delphi [-]procedure IB_Grid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); If Arow = 1 then // colocas el numero de la fila que deseas pintar IB_Grid1. Canvas.Brush.Color := $0084FF84;
Gracias por tu respuesta.

He probado tu ejemplo y no me pinta la linea. Seguire probando ib_Grid a ver si tiene algo que ver con la propiedad "state".

Si alguien se le ocurre algo le agradezco su ayuda.

Un saludo.
Responder Con Cita
  #5  
Antiguo 13-10-2006
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
¿Y si haces un TypeCast? (no se como se dice en cistiano ) ; "engañas" al compilador para que crea que la tabla es de una DBGrid y así usas sus propiedades, claro está que sólo funcionará si son compatibles.

Sería algo así:
Código Delphi [-]
procedure IB_Grid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin 

if TDBGrid(Sender).DataSource.Dataset.FieldbyName('ESTADO').AsString = 'Seguimiento' then
 if (gdFocused in State)
    then TDBGrid(Sender).canvas.brush.color := clBlack
    else TDBGrid(Sender).canvas.brush.color := $00D5FFFF;
end;
yo lo uso para obtener el valor ROW de un DBGrid :
Código Delphi [-]
indice_grid:=TStringGrid(DBGrid1).Row;
No he podido probar el ejemplo que te pongo porque no tengo ibobjects ya me contaras si es lo que buscas.

Saludos y suerte.
Responder Con Cita
  #6  
Antiguo 13-10-2006
Avatar de kovaski
kovaski kovaski is offline
Miembro
 
Registrado: oct 2006
Ubicación: Valencia
Posts: 39
Poder: 0
kovaski Va por buen camino
Hola.

Te agradezco fly tu respuesta.

He probado tu sugerencia pero no son compatibles, de echo el ib_grid de ibobjecs me parece que no desciende del TDBGrid, y claro esta me da error en ejecución.

Lo cierto que estoy un poco frustrado(jeje). Porque necesito pintar las dichosas lineas ya que es una pieza clave en la claridad de mi programa. Y la razón por la que uso ib_grid de ibobjects es porque en aplicaciones cliente/servidor por internet me parece mucho más rapido y polivalente que los Grid normales, puesto que estan diseñados especificamente para estos entornos.

Seguire investigando(que remedio :-)).

Con todo os seguire agradeciendo vuestras sugerencias.

Saludos.
Responder Con Cita
  #7  
Antiguo 13-10-2006
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Aun no lo tengo del todo pero algo va haciendo...

Código Delphi [-]
procedure TCobros_f.IB_Grid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
 IB_Grid1.Canvas.Brush.Color := $991122;
 IB_Grid1.Canvas.Font.Color := $CC55DD;
 valor:='aqui hay que encontrar el valor del campo a mostrar';
 IB_Grid1.DefaultDrawCell(acol,arow,rect,state,VALOR,taCenter);
end;

Esto funciona, y pinta la celda de un color y el texto de otro, pero necesita que al terminar de asignar los colores y demás se llame al procedimiento DefaultDrawCell para que pinte la celda con los valores asignados anteriormente al canvas.

No se como asignar a la variable VALOR el contenido del campo actual, así que por ahora este código solo sirve para pintar el grid de colores con un valor constante.... pero ya es algo

Cuando tenga un rato sigo con el tema.
Responder Con Cita
  #8  
Antiguo 14-10-2006
Avatar de kovaski
kovaski kovaski is offline
Miembro
 
Registrado: oct 2006
Ubicación: Valencia
Posts: 39
Poder: 0
kovaski Va por buen camino
Thumbs up ¡solución!

Al fin he dado con la solución al problema .

Aqui la pongo para quien le pueda servir. Gracias fly por tu tiempo e interes.

En primer lugar hay que poner la propiedad "DefDrawBefore" del ib_Grid en "True"(por defecto).

En el "uses" hay que poner "IB_Components".

Tenemos que atacar el evento "OnGetCellProps" del ib_Grid y escribimos lo siguiente:

Código Delphi [-]
procedure TFichaOfertas.IB_Grid1GetCellProps(Sender: TObject; ACol,
  ARow: Integer; AState: TGridDrawState; var AColor: TColor; AFont: TFont);
var
  Datos: string;
  Columnas: TIB_Column;
begin
//Este código es para pintar solo la celda del campo "ESTADO" que tiene la palabra "Activo"
if Tablas.dsOfertas.Active then
  begin
    with Tablas.dsOfertas.Dataset do
    begin
      BufferRowNum:= ib_Grid1.DataRow[ARow];
      if BufferRowNum > 0 then
       begin
        Columnas:= ib_Grid1.GridFields[ib_Grid1.DataCol[ACol]];
         if Assigned(Columnas) and (Columnas.FieldName = 'ESTADO') then
           begin
             Datos:= BufferFieldByName('ESTADO').AsString;
             if Datos = 'Activo' then
              if Acolor = ib_Grid1.Color then
                AColor:= clLime;
           end;
       end;
    end;
  end;
//Este código es para pintar la fila completa que tiene el campo "ESTADO" la palabra "Activo"
if Tablas.dsOfertas.Active then
  begin
    with Tablas.dsOfertas.Dataset do
    begin
      BufferRowNum:= ib_Grid1.DataRow[ARow];
      if BufferRowNum > 0 then
       begin
       Datos:= BufferFieldByName('ESTADO').AsString;
       if Datos = 'Activo' then
         if Acolor = ib_Grid1.Color then
          AColor:= clRed;
       end;
    end;
  end;

end;

Gracias por vuestra ayuda. Saludos .
Responder Con Cita
  #9  
Antiguo 14-10-2006
fly fly is offline
Miembro
 
Registrado: abr 2005
Posts: 65
Poder: 20
fly Va por buen camino
Me alegro que se pudiera resolver, por mi parte seguiré "fedellando" con los ibobjets pues si que he notado demasiadas pegas en las aplicaciones cuando las corro a traves de internet.

saludos.
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
Cambiar color de una Fila en un String Grid neleg Conexión con bases de datos 4 25-11-2005 10:14:03
cambiar color de fila y columna de un StringGrid1 gulder Varios 2 16-11-2005 17:05:42
Cambiar de color una fila de un Dbgrid segun una condicion... hook Varios 5 12-07-2005 23:40:36
cambiar color en fila seleccionada en un dbgrid gmontes OOP 2 05-05-2005 22:33:24
cambiar color a la fila seleccionada de un grid!! triniti OOP 2 03-08-2004 13:00:42


La franja horaria es GMT +2. Ahora son las 10:34:53.


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