Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 21
Kafu Va por buen camino
Evento en componente dentro de frame

Hola, foro.
Tengo un problema que no logro entender.
Me he creado un componente que tiene tiene una propiedad de tipo evento (un tipo de evento creado por mí) y que lo que hace es capturar el doble click de una de sus propiedades, que es un grid, y en ese doble click dispara el evento en funcion de ciertas condiciones.
El caso es que si pongo el componente en un form funciona sin problemas, pero cuando esta en un frame no se dispara el evento, porque en teoría no está asignado el manejador.
He visto que otro tipo de evento sí que es disparado aunque su manejador este en el frame y no en el form contenedor, así que supongo que hay algún problema a la hora de cargar el form y se pierde ese manejador que está en el frame.
Supongo que alguien puede haberse encontrado con un problema similar, agradecería alguna idea que me ayudara a descartar errores típicos. Un saludo y gracias por adelantado,








F.T.G.
Responder Con Cita
  #2  
Antiguo 29-05-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: 26
delphi.com.ar Va por buen camino
Te cuento que uso Frames habitualmente, y nunca he tenido un problema de este tipo, lo que se me ocurre que pueda estar pasando es que en el código del frame tengas el código del evento que quieras ejecutar, y cuando pegas este frame en un Form, sobrescribes este evento sin hacer un inherited, por lo tanto no se vuelve a llamar al evento. ¿Es posible algo así?
Otra posibilidad es que el evento del frame heredado sea nil, por lo tanto no se llamará al del frame.


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 30-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 21
Kafu Va por buen camino
Lo primero muchas gracias por contestar.
No sobreescrio el manejador del evento. He probado sobreescribirlo y me realiza sólo el código que pongo en este manejador, aunque ponga inherited.
En cuanto a lo de que el manejador del frame heredado sea nil, eso es exactamente lo que pasa. Pero ahí está el problema, yo lo he implementado en el frame.
Es como si al cargar el frame repetara todos los eventos que tiene salvo este. Por esto pienso que como es un evento creado por mí, algo se me escapa en su definicion. El error es cuando lo llamo desde el componente:

if assigned(falsuceder) then
begin
falsuceder(self);
end;

Si el componente está directamente en el form, o bien la implementación del manejador de ese evento, cuando llega a ese punto assigned devuelve true.
Pero cuando está dentro de un frame me dice que no está asignado. Es como si al cargar el formulario y arrastrar consigo las propiedades de sus frames, resetara el valor de ésta.
No se me ocurre cómo puedo solucionarlo, voy a seguir mirando y si no puedo implementaré el evento en el form contenedor, que tampoco es tan grave. Un saludo,











F.T.G.
Responder Con Cita
  #4  
Antiguo 30-05-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: 26
delphi.com.ar Va por buen camino
Post

Porqué no nos muestras como has definido el evento...
Supongo que no le habrás puesto un stored False... ¿No?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 30-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 21
Kafu Va por buen camino
Cita:
Supongo que no le habrás puesto un stored False... ¿No?
No, ya había pensado en eso.
Si fuera un problema de almacenaje el frame perdería la referencia cada vez que lo abriera, pues no se guardaría en el dfm. No es el caso. Tengo el manejador de evento vivito y coleando en el frame. Además en un form funciona correctamente.

Pero efectívamente creo que por ahí van los tiros.
En algún momento cuando el formulario carga las propiedades del frame ésta se la pasa por el forro. El problema es que no sé por qué. Pero que está almacenada en el dfm del frame es seguro.
Gracias de nuevo, si tienes alguna otra idea me ayudarás mucho.
Un saludo,
Responder Con Cita
  #6  
Antiguo 30-05-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: 26
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por delphi.com.ar
Porqué no nos muestras como has definido el evento...
Me refería a que postees la definición de tu evento, o si no te molesta el código de todo el TFrame...
¿Cuál es el nombre de tu evento? No será una palabra reservada o algún evento con trato un tanto "particular"
__________________
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 30-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 21
Kafu Va por buen camino
Código:
type
  tEventoMalvado = procedure (sender: tobject; auxiliar: integer) of object;
  tComponenteMalvado = class(tcomponent)
  private
    FEventoMalvado: tEventoMalvado;
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    property AlOcurrir : tEventoMalvado read FEventomalvadowrite SetEventoMalvado;
    { Published declarations }
  end;
Te había entendido. No puedo publicar el código del frame. Temas de contrato. Esto sería algo análogo al componente que está en el frame.
En principio no veo ninguna causa por la que esto pueda estar mal. Miro el dfm del frame y está asignada la propiedad, no en el del form pero eso no debería influir, porque si pones un manejador para un onclick en un frame tampoco se almacena en el dfm del form pero luego sí se ejecuta. No sé qué puede ocurrir, sinceramente, creo que tiene que ver con la lectura de componentes del formulario pero no sé como depurar hasta ese punto. Un saludo,










F.T.G.
Responder Con Cita
  #8  
Antiguo 30-05-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: 26
delphi.com.ar Va por buen camino
¿Qué haces en el procedure SetEventoMalvado?

Código:
FEventomalvado := Value;
¿Este es el nombre real del evento?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 30-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 21
Kafu Va por buen camino
Cita:
¿Qué haces en el procedure SetEventoMalvado?
Código:
FEventomalvado := Value;
Hago eso simplemente. No me atrevería a que al asignar el manejador de evento se tocaran otras propiedades. Demasiado inestable.

El evento no se llama así, aunque estoy pensando en rebautizarlo. De todas formas está garantizado que no es palabra clave ni coincide con otro método, propiedad ni variable en el código.

Realmente no hay nada de particular en el código. Creo que desistiré e implementaré el manejador en el formulario que contiene el frame.

Un saludo y gracias,









F.T.G.
Responder Con Cita
  #10  
Antiguo 02-06-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 21
Kafu Va por buen camino
Comentarte que se ha solucionado. Había unas propiedades en el frame que antes de crear el componente se encargaban de su funcionalidad. Sospecho que puedan haber tenido algo que ver. De todos modos estoy peleando con los frames con desigual fortuna, y aún no puedo asegurar 100% la razón por la cual el formulario que contenía el frame no cargaba la asignación del manejador de evento, ni por qué ahora si lo hace. Un saludo,
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 10:23:07.


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