Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Celdas de un DBgrid (https://www.clubdelphi.com/foros/showthread.php?t=16818)

jzk 13-12-2004 17:33:33

Celdas de un DBgrid
 
Hola a tod@s,

Tengo un dbgrid que utilizo para mostrar un calendario donde en el eje "X" muestro los días y en el "Y" las tareas que tengo pendientes por hacer.

Mi intención es si para el lunes (por ejemplo) tengo la tarea nº1 asignada, la casilla que corresponde en el DBgrid colorear de color rojo y si no es así manternerlo del color predefinido.

Como puedo acceder a una celda concreta de una determinada casilla para poder de esta manera modificar el color de esta.

Un saludo a tod@s y gracias por su atención.

roman 13-12-2004 18:09:49

Cita:

Empezado por jzk
Como puedo acceder a una celda concreta de una determinada casilla para poder de esta manera modificar el color de esta.

Esto no es posible. Es decir, el StringGrid no maneja este tipo de propiedades por casilla. Lo que debes hacer es poner la propiedad DefaultDrawing del StringGrid en false y manejar su evento OnDrawCell para pintar tu mismo el contenido de la celda usando el Canvas del StringGrid. El evento te pasa como parámetro las corrdenadas de la casilla así como el rectángulo en donde debes pintar. Tú debes entonces verificar si las coordenadas corresponden o no a la casilla de una tarea asignada y pintar de rojo en tal caso (Canvas.Brush.Color := clRed; Canvas.FillRect(Rect)).

Busca por colorear stringgrid en los foros y encontrarás algunos ejemplos del uso del evento.

// Saludos

jzk 13-12-2004 18:17:33

Gracias de nuevo....

jzk 14-12-2004 08:32:36

Creía que estaba solucionada mi duda pero me ha surgido una pequeña pega y es que el evento OnDrawCell no aparece en el objeto que utilizo, ya que se trata de un DBGrid.

De este modo, puedo utilizar el evento OnDrawColumnCell como sustituto, pero este no pasa por parametro el número de fila aunque si el de columna de manera que no puedo comprobar el valor de la casilla.

Tambíen aprovecho para que me verifiqueis si la función/procedimiento para obtener el valor de la casilla es:

DBGrid1.Cells[Acol,Arow]

Graciassssssssss

Neftali [Germán.Estévez] 14-12-2004 10:15:04

Cita:

Empezado por jzk
Tengo un dbgrid...

Cita:

Empezado por roman
Esto no es posible. Es decir, el StringGrid...

Creo que cada uno váis en una dirección, distintas, por cierto...;)


Cita:

Empezado por jzk
Tengo un dbgrid que utilizo para mostrar un calendario donde en el eje "X" muestro los días y en el "Y" las tareas que tengo pendientes por hacer.
Mi intención es si para el lunes (por ejemplo) tengo la tarea nº1 asignada, la casilla que corresponde en el DBgrid colorear de color rojo y si no es así manternerlo del color predefinido.

Si utilizas un DBGrid, entiendo que por debajo tienes una tabla/consulta con los datos necesarios; La manera más clara para colorear celdas de un DBGrid es pensar en los datos, no en las celdas.
Segun lo que explicas, tu tabla debería ser una tabla de tareas, con un campo para cada día de la semana.
(a) Si esto es correcto seguir.
(b) Si no es correcto (entonces es que no me he enterado de nada) goto fin.

El evento que debes utilizar en un DBGrid es el OnDrawColumnCell. Preguntas por el valor del campo y si hace falta modificas el color. Prueba con algo como ésto:

Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin 
  // La columna no está seleccionada?
  if (State = []) then begin
    // El valor de la celda es Asignado? (suponiendo A=Asignado)
    if (DBGrid1.Columns[Datacol].Field.AsString = 'A') then begin
      // Cambia el color de fondo de la celda a ROJO.
      DBGrid1.Canvas.Brush.Color := clRed;
      // Manda pintar la celda
      DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
    end;
  end;
end;


También puedes revisar éste hilo, ahí tienes algunos enlaces.

jzk 14-12-2004 10:44:15

No si si me valdrá pero reirme un rato si que me he reido (goto fin)

Ahora te digo algo.

roman 14-12-2004 14:13:31

Vaya! Debo recordar ponerme los lentes antes de contestar :o

// Saludos


La franja horaria es GMT +2. Ahora son las 11:34:57.

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