Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-09-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Menejar un TypeCast con varios componentes

Hola a todos, resulta que quiero hacer dos procedimientos donde uno de ellos le cambie el color y la fuente cuando reciba el foco y el otro que vuelva a restaurar ambas cosas cuando sale.

En los eventos enter y exit es donde estoy escribiendo las llamadas a estos procedimientos, pero mi duda es la siguiente:

procedure enter(.............);
begin

...........color := clred;
............font.color := cdmaroon;
end;

¿Qué debería recibir este procedimiento y como lo debería tratar para que sea lo que sea que reciba lo pueda tratar como indica el procedimiento?

Lo grandioso del desierto es que siempre esconde un pozo de agua.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #2  
Antiguo 15-09-2003
dabas dabas is offline
Miembro
 
Registrado: jun 2003
Ubicación: En mi casa
Posts: 39
Poder: 0
dabas Va por buen camino
Si lo entendí bien creo que esto te servirá:
Código:
procedure TForm1.teditEnter(Sender: TObject);
begin
  (Sender as TTEdit).Color:=clRed;
  (Sender as TTEdit).Font.Color:=clMoneyGreen;
end;
y para la salida
Código:
procedure TForm1.teditEnter(Sender: TObject);
begin
  (Sender as TTEdit).Color:=clRed;
  (Sender as TTEdit).Font.Color:=clMoneyGreen;
end;
(Sender as TTEdit) -> lo he usado para reutilizarlo con todos los TEdit que quiera.


Hasta otra.
Responder Con Cita
  #3  
Antiguo 15-09-2003
dabas dabas is offline
Miembro
 
Registrado: jun 2003
Ubicación: En mi casa
Posts: 39
Poder: 0
dabas Va por buen camino
Valla,
os habreis dado cuenta que el codigo es igual (tanto copiar y pegar pa ná es tonteria)

para la salida es lo mismo pero:

procedure TForm1.tedit1Exit(Sender: TObject);
Responder Con Cita
  #4  
Antiguo 17-09-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Perdonar el retraso he estado de puente.

Tú solución es correcta pero no es la que busco, lo que yo quiero es no tener que hacer un type cast al componente u objeto que que recibo según lo que sea, sino simplemente reciba lo que reciba me sirva para todos los componentes. Con tú solución tendría que hacer comparaciones para saber si lo que recibo es un Tedit, TDBEdit o TDBlookupcombox, etc. Yo busco algo que que me haga el type cast pero sin tener que hacer esas comparaciones, algo que sea mas menos así:

procedure enter(elemento:Tobject;tipo:Classtype);
begin

tipo(elemento).color := clred;

end;

Este es el aspecto de mi solución buscada.

De nuevo gracias a todos por vuestra ayuda.

La grandeza del desierto reside en que siempre esconde un pozo de agua.
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #5  
Antiguo 17-09-2003
dabas dabas is offline
Miembro
 
Registrado: jun 2003
Ubicación: En mi casa
Posts: 39
Poder: 0
dabas Va por buen camino
Vale, vale. ya entiendo, eso me pregunté yo hace no mucho tiempo, pero no queria investigar como se hacia y lo hice de la manera que he escrito.
Pero yo creo que se podria aplicar un override a la funcion "enter" por ejemplo y asi poder añadir otro parametro como indicas:
procedure enter(elemento:Tobject;tipo:Classtype);
Pero desconozco como se pone en practica.
Pues eso, siento no ser de mas ayuda.

Hasta otra
Responder Con Cita
  #6  
Antiguo 17-09-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por CORBATIN
Tú solución es correcta pero no es la que busco, lo que yo quiero es no tener que hacer un type cast al componente u objeto que que recibo según lo que sea, sino simplemente reciba lo que reciba me sirva para todos los componentes. Con tú solución tendría que hacer comparaciones para saber si lo que recibo es un Tedit, TDBEdit o TDBlookupcombox, etc. Yo busco algo que que me haga el type cast pero sin tener que hacer esas comparaciones...
Yo a esto le veo dos soluciones:
- Que los procedimientos reciban las clases de cuanto mas arriba en el arbol jerárquico de clases mejor... el tema es ver cual es la clase indicada para ver a las propiedades que quieres acceder. Si son clases propietarias te recomendaría crear clases abstractas... mejor dicho clases con métodos abstractos, de donde hereden todas tus clases.
- Usar RTTI, te recomiendo buscar hilos anteriores de esta utilidad, pues ya se ha comentado en mas de una oportunidad.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 18-09-2003
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
Hola CORBATIN, el problema está en heredar las propiedades del ancestro de los controles a colocar en tu form. Si revisas la herencia de las componentes verás que el tcontrol tiene las propiedades Color y Font que son después heredadas por sus descendientes, pero esto tiene un problema y es que en el tcontrol esas propiedades son protegidas, entonces el primer paso sería crear una nueva clase del tcontrol que haga published esas dos propiedades:
Código:
implementation
type tmicontrol=class (tcontrol)
published
        property color;
        property font;
        end;
Una vez que tenemos esta clase llamamos a los eventos haciendo el typecast con el sender que será siempre un descendiente del tcontrol:
Código:
procedure TForm1.Edit1Enter(Sender: TObject);
begin
        if sender is tcontrol then
        with tmicontrol(sender) do begin
        color:= clred;
        font.Color:=clblue;
        end;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
        if sender is tcontrol then
        with tmicontrol(sender) do begin
        color:= clwhite;
        font.Color:=clblack;
        end;
end;
Solo te resta asociar los eventos Enter y Exit de todos tus controles a los del edit u objeto elegido por tí para escribir las declaraciones.
Creo que te debe funcionar, prueba y después nos comentas.
Saludos y suerte
Responder Con Cita
  #8  
Antiguo 19-09-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Eso era lo que yo buscaba. Sabía que la clase Tcontrol era la equivalente en todos y con la propiedad color pero no sabía el motivo de que no me permitiese utilizar esta propiedad.

Muchas gracias a todos por vuestra ayuda.

Ahora me toca investigar para crear los diversos componentes que utilizo para que lo puedan hacer ellos solos, sin que tener que añadirle a cada uno de mis componentes código alguno, sería una buena idea.

La grandeza del desierto reside en que siempre esconde un pozo de agua. (y en este caso me lo han mostrado).
__________________
No hay vientos favorables para quién no conoce su rumbo.
Responder Con Cita
  #9  
Antiguo 19-09-2003
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
Hola CORBATIN
Cita:
Posteado originalmente por CORBATIN
Ahora me toca investigar para crear los diversos componentes que utilizo para que lo puedan hacer ellos solos, sin que tener que añadirle a cada uno de mis componentes código alguno, sería una buena idea.
En realidad no entiendo bien a que te refieres con este comentario, ¿te refieres a hacer nuevas componentes que contengan ese efecto como propiedades de ellas?¿pudieras explicarte un poco para saber que deseas y ver si entre todos podemos hacerlo?
Saludos
Responder Con Cita
  #10  
Antiguo 21-09-2003
CORBATIN CORBATIN is offline
Miembro
 
Registrado: may 2003
Ubicación: España
Posts: 131
Poder: 21
CORBATIN Va por buen camino
Bueno, en realidad solo era un comentario pero mi intención es tal y como has dicho crear componentes que tengan estas propiedades para no tener que añadirlas una a una con código y así poder ser más rápido.

Aunque lo que quería era investigar por mi cuenta, si alguién quiere ayudar también le estaría muy agradecido, saludos.
__________________
No hay vientos favorables para quién no conoce su rumbo.
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 05:34:21.


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