PDA

Ver la Versión Completa : Celdas de un DBgrid


jzk
13-12-2004, 17:33:33
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
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
Tengo un dbgrid...Esto no es posible. Es decir, el StringGrid...Creo que cada uno váis en una dirección, distintas, por cierto...;)


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:


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 (http://www.clubdelphi.com/foros/showthread.php?t=14929), 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