Ver Mensaje Individual
  #2  
Antiguo 21-01-2006
Avatar de jmariano
jmariano jmariano is offline
Miembro
 
Registrado: jul 2005
Posts: 376
Reputación: 19
jmariano Va por buen camino
Mas que usar el evento OnPaintPanel que sólo se ejecuta cuando el
DBCtrlGrid necesita ser "repintado", probaría a utilizar el evento del DataSource: OnDataChange (que se ejecuta cada vez que cambian los datos, ya sea por que se produjo un desplazamiento, etc.), de esta manera te asegurarías siempre de que los paneles se mostrarán en el color correcto.

Por ejemplo, si tienes el componente DataSource en el mismo formulario:
Código Delphi [-]
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if (DataSource1.DataSet.FieldByName('estado').AsString) = 'Libre' then
    Panel1.Color :=clGreen
  else Panel1.Color :=clRed;
end;

(En caso de que lo tengas en un módulo de datos podrías crearte en el módulo una propiedad pública de tipo "evento", TNotifyEvent, que se ejecutara cada vez que cambiaran los datos, y capturar, luego, esta propiedad en el formulario)


Otra solución, tal vez más simple, sería probar a invocar al método Repaint del DBCtrlGrid cada vez que el panel recibe el foco (evento OnEnter) y ver si funciona. (Repaint obliga al DBCtrlGrid a "repintarse", así que, en teoría, tendría que funcionar).

Saludos!

Última edición por jmariano fecha: 21-01-2006 a las 23:39:51.
Responder Con Cita