Ver Mensaje Individual
  #4  
Antiguo 27-05-2004
Sonic Sonic is offline
Miembro
 
Registrado: may 2004
Posts: 40
Reputación: 0
Sonic Va por buen camino
Supongo que no me explicado muy bien, suele ocurrirme a menudo, es que aprendí builder por mi cuenta y es muy probable que no esté usando los términos correctos, veras:

Cuando digo que mi componente lo quiero hacer VCL lo que quiero decir es que lo quiero incrustar en las barras de herramientas, ahora mismo lo tengo en la barra Samples (lo llamo TSRichEdit y hereda obviamente de TRichEdit), disponible para poder ser arrastrado a la aplicación de cualquier usuario.

Según tenía entendido eso es un componente VCL, pero ya te digo si no es así agradecería una aclaración.

Mi problema no es la asignación del evento, para asignarlo uso órdenes como:

Puntero_a _funcion_de_usuario =OnSelectionChange;
OnSelectionChange=MiFuncion;

Y el evento se asigna correctamente.

Lo que yo quiero es que mi componente, cuando alguién lo "pegue" en su aplicación responda al evento OnSelectionChange, primero mediante mi funcion y despus mediante la que él tenga especificada en el Inspector de Objetos.

Para ello, la última linea del código de MiFuncion es :

Puntero_a _funcion_de_usuario (Owner);

Y así se ejcuta primero mi función y luego la del usuario.

Y ahora cuento de nuevo el problema:

Cuando, como usuario, del Componente VCL abro un proyecto, que contiene ese nuevo componente, pegado desde la barra de herramientas Samples. Éste entra en estado de ejecucíón (en la versión anterior del componente, la que no está integrada en la barra SAMPLES no se ejecuta el código del componente hasta que no se ejecuta el proyecto completo por eso me refiero a uno como VCL (Visual Component Library) y al otro como componente o clase a secas). Al ajecutarse el código del componente se llega a las lineas:

Puntero_a _funcion_de_usuario =OnSelectionChange;
OnSelectionChange=MiFuncion;

En concreto la última borra automáticamente en el inspector de objetos la casilla donde antes ponía SRichEdit1SelectionChange (por ejemplo) y me la deja vacía.
La función SRichEdit1SelectionChange sigue existiendo en el código pero el vículo se ha roto.

Cuando posteriormente le doy a ejecutar, la aplicación se ejecuta sin problemas, ya que el componente tiene capturada la dirección de la funcion del usuario (SRichEdit1SelectionChange). Pero, si guardo el proyecto, esta vez se guarda sin el vículo a la función de usuario (es decir con la casilla del Inspector de Objetos vacía). De modo que al cerrar y abrir el proyecto otra vez, cuando mi componente va a guardar en la variable
Puntero_a _funcion_de_usuario la dirección de la funcion de usuario que atiende a OnSelectionChange se encuentra con que esta dirección es NULL (el vínculo hora no existe) y posteriomente cuando se ejecuta el proyecto completo al producirse el evento OnSelectionChange solo se ejecuta mi función y no la del usuario pese a que está esta escrita.

Espero que esta vez haya quedado un poco más claro que es lo que quiero hacer y cuál es mi problema, y espero que ahora sí me podaís ayudar.

Gracias
Responder Con Cita