PDA

Ver la Versión Completa : Cambiar el color de fondo de un Edit o DBEdit


FGarcia
07-05-2007, 00:34:46
Saludos:
Con el siguiente codigo cambio el color de fondo de un DBEdit cada vez que ingreso (ENTER) a el o salgo (EXIT) del mismo

//Asignamos color al DBEdit
procedure TfrmClientes.DBEdit1Enter(Sender: TObject);
var ColorOrigen: TColor;
begin
ColorOrigen := DBEdit1.Color ;
DBEdit1.Color := clSkyBlue;
end;

//Restauramos el color del DBEdit;
procedure TfrmClientes.DBEdit1Exit(Sender: TObject);
var ColorOrigen: TColor;
begin
DBEdit1.Color := ColorOrigen;
end;

No quiero repetir este codigo para 20 edits, ok Delphi me permite asignar el evento OnEnter y OnExit al DBEdit1 y despues se lo puedo asignar a los demas DBEdit pero esto no funciona porque (eso creo) hago referencia en especifico a un DBEdit en este caso DBEdit1.

si creo algo como esto:


procedure TfrmClientes.ColorEnter;
var
Cnt: integer;
ColorOrigen: TColor;
begin
for Cnt := 0 to Pred(ComponentCount) do
begin
if Components[Cnt] is TDBEdit then
begin
ColorOrigen := TDBEdit(Components[Cnt]).Color;
TDBEdit(Components[Cnt]).Color := clSkyBlue;
end;
end;
end;

procedure TfrmClientes.ColorExit;
var
Cnt: integer;
ColorOrigen: TColor;
begin
for Cnt := 0 to Pred(ComponentCount) do
begin
if Components[Cnt] is TDBEdit then
TDBEdit(Components[Cnt]).Color := ColorOrigen;
end;
end;

procedure TfrmClientes.DBEdit1Enter(Sender: TObject);
begin
ColorEnter;
end;

procedure TfrmClientes.DBEdit1Exit(Sender: TObject);
begin
ColorExit;
end;

Entonces todos los DBEdit se colorean simultaneamente, en algo me perdi, se agradece la ayuda.

FGarcia
07-05-2007, 00:56:08
De nuevo aqui!
Bueno resolvi esto de la siguiente manera:

private
{ Private declarations }
ColorOrigen: TColor;
procedure ColorEnter(Sender: TObject);
procedure ColorExit(Sender: TObject);
procedure TfrmClientes.ColorEnter(Sender: TObject);
begin
ColorOrigen := TDBEdit(Sender).Color;
TDBEdit(SEnder).Color := clSkyBlue;
end;
procedure TfrmClientes.ColorExit(Sender: TObject);
begin
TDBEdit(Sender).Color := ColorOrigen;
end;
procedure TfrmClientes.DBEdit1Enter(Sender: TObject);
begin
ColorEnter(Sender);
end;
procedure TfrmClientes.DBEdit1Exit(Sender: TObject);
begin
ColorExit(Sender);
end;

Se aceptan todas las sugerencias

ContraVeneno
07-05-2007, 19:18:46
Como ya descubriste las bondades del objeto Sender, el mismo evento OnEnter y OnExit manejan este objeto, por lo que no sería necesario crear las funciones ColorEnter y/o ColorExit.

Puedes usar el mismo código en el propio evento de tu primer control y asignarle ese mismo evento a todos los demás.

pborges36
07-05-2007, 19:27:06
Hola. Tambien podrias usar este componente (http://www.clubdelphi.com/foros/showthread.php?t=37227&highlight=evento+cambio+de+foco) que pude realizar gracias a la ayuda de algunos integrantes del foro. Espero te sirva. Saludos.

FGarcia
08-05-2007, 05:27:24
:D :D :D :D
Contraveneno: creo que ya estaba harto cuando puse el codigo final, asi que hace un rato que volvi al computador vi tu mensaje y quedo esto:


//Asignamos color al dbedit
procedure TfrmClientes.DBEdit1Enter(Sender: TObject);
begin
ColorOrigen := TDBEdit(Sender).Color;
TDBEdit(SEnder).Color := clSkyBlue;
end;

//Restauramos color al dbedit
procedure TfrmClientes.DBEdit1Exit(Sender: TObject);
begin
TDBEdit(Sender).Color := ColorOrigen;
end;

Espero haber entendido tu mensaje, si no me lo haces saber. Gracias!

pborges36 Gracias por el componente, la pregunta al final el codigo que pusiste ¿es el final..final o despues de tantas opiniones hubo otro cambio?

pborges36
09-05-2007, 19:28:34
Es verdad que hubo varias opiniones, personalmente me quede con las modificaciones que hizo Crandel, la primera. Funciona de 10. Saludos.

patoaballay
15-05-2007, 21:16:00
como se puede cambiar el color de fondo de una fila seleccionda en una grilla de datos?? puedo cambiar el color del texto de la fila seleccionada, pero quisiera cambiar tambien el color de fondo de la misma fila.

ContraVeneno
15-05-2007, 21:20:19
http://www.clubdelphi.com/foros/showthread.php?t=30372&highlight=cambiar+color+grilla