Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2006
Avatar de casacham
casacham casacham is offline
Miembro
 
Registrado: abr 2006
Ubicación: Cordoba->Argentina. Arboleas->Almeria->España
Posts: 184
Poder: 19
casacham Va por buen camino
Resaltar TEdit, TDBEdit, TComboBox al recibir foco

El código que propongo aquí es para dar un efecto visual agradable a los objetos de entrada de datos de los formularios que nuestros usuarios utilizan para cargar las tablas.
Utilizo el viejo y no tan recordado operador as y el objetivo del codigo es hacer que algunos de estos objetos (TEdit, TDBEdit, TComboBox, etc.) cambie su propiedad color al recibir foco y retorne a la original al perderlo. El punto es que uno podria hacerlo de muchas maneras, es decir escribiendo arduo código o bien simplificarlo en solo una linea. Aquí la variable Sender es fundamental. No solo contiene el nombre de nuestro objeto, sino que puede transformarse en el. Veamos el ejemplo.
Para hacer que nuestro objeto muestre un color al recibir foco y retorne al original debemos captar dos eventos, para el primero es “OnEnter” y el segundo (al perder el foco) “OnExit”. Así podríamos escribir para cada objeto que tengamos un evento similar a este:
Código Delphi [-]
procedure TForm1.Edit1Enter(Sender: TObject);
begin
  Edit1.Color := clYellow;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit1.Color := clWindow;
end;

De esta forma, si tenemos 10 TDBEdit habrá 20 procedimientos para simplemente cambiar el color. Desde ya esto no es aceptable en programación.
Otra forma seria crear un solo evento y testar el parámetro Sender. Esto seria algo asi como lo que sigue:

Código Delphi [-]
procedure TForm1.Edit1Enter(Sender: TObject);
begin
  IF Sender=Edit1 Then Edit1.Color := clYellow;
  IF Sender=Edit2 Then Edit2.Color := clYellow;
  IF Sender=Edit3 Then Edit3.Color := clYellow;
  IF Sender=Edit4 Then Edit4.Color := clYellow;
end;
No tan engorroso, pero si tedioso. Pues es aquí donde viene la solución que propongo, y esto, creo que muchos de los programadores avanzado lo deben conocer, pero para los noveles es un misterio como lo fue para mi cuando buscaba una solución y no tenia donde consultar. Utilizaremos el operador as y la variable Sender de la siguiente manera.
1) Haremos doble click en el evento OnEnter del primer o el TDBedit que elijan
2) Escribiremos el siguiente codigo para tal evento
Código Delphi [-]
procedure TForm1.DBEdit1Enter(Sender: TObject);
begin
  (Sender as TDBEdit).Color:= clYellow;
end;

3) Luego, ampliaremos la aplicación haciendo que todos los demás objetos TDBEdit compartan el mismo evento, copiando con ctrl.+insert y shifht+insert el nombre del evento en los OnEnter de los demas TDBEdit de nuestro formulario.
4) Luego debemos escribir el código para el evento de perdida de foco. No es ni mas ni menos que similar a este.
Código Delphi [-]
procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
   (Sender as TDBEdit).Color:= clWindow;
end;

Conclusión: Esto hace que cuando el objeto este funcionando o el usuario escribiendo en el este se encuentre de color amarillo, resaltado de los demás de color blanco. Luego al perder foco recupera su color normal. Ademas deseo que vean el potencial que da la combinacion de la variable sender con el operador as para escribir procedimientos comunes a muchas acciones de nuestro programa.
Un ultimo ejemplo nos aclara el poder real de estos comandos. Para el evento OnDblClick de TGraphic escribimos la siguiente linea de comando a compartir con todos los TGraphic de nuestro proyecto. Donde Abrir es un TOpenDialog.

Código:
begin 
  IF Abrir.Execute THEN (Sender As TGraphic).SaveToFile(Abrir.FileName);
end;
Agradecería aquel que utilice este codigo comentara si le ha resultado beneficioso y si le ha resuelto algunos problemas, desde ya muchisimas gracias
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


La franja horaria es GMT +2. Ahora son las 14:23:05.


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