Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error A component Named Matri already Exists (https://www.clubdelphi.com/foros/showthread.php?t=34076)

janlo 26-07-2006 13:17:00

Error A component Named Matri already Exists
 
Hola Amigos,

tengo una aplicacion que lleva funcionando perfectamente 3 años y ahora de pronto en uno de los ordenadores donde esta instalado da un error al intentar abrir uno de los formularios me dice "A component Named matri Already Exists". Solo me pasa en este equipo. Lo tengo instalado el programa en varios sitios y no me ha dado ningun tipo de problema. ¿A que puede ser debido esto? ¿Puede tener que ver con el equipo o el sistema operativo?

Muchas Gracias de antemano.

Neftali [Germán.Estévez] 26-07-2006 13:23:07

¿Estás seguro de que no has cambiado nada (del programa) en ese ordenador?
Normalmente ese error da cuando en un formulario hay dos componentes con igual nombre.
No creo que tenga nada que ver con el Sistema Operativo ni con el ordenador.

¿En el formulario en cuestión creas algun componente dinámicamente?

janlo 26-07-2006 17:08:01

Hola Neftali,

respecto a tu respuesta comentarte que del programa no se ha tocado nada, es el mismo programa que hacia 3 años. Ha empezado de pronto a dar ese error. Ya te digo, solo pasa en ese equipo.

marcoszorrilla 26-07-2006 20:34:36

Pues yo opino como Neftalí. Solución: Instala Delphi en ese equipo, revisa ese formulario a fondo, algo tiene que tener, puede ocurrir que por algún caso se den cirucunstancias que no se habían dado antes.

Por poner un ejemplo hace un par de días tuve que mantener código fuente ajeno, el problema era que un listado de Balance no funcionaba correctamente, me puse a investigar y resulta que el problema era que no había funcionada nunca, lo que sucede es que ese listado en concreto no lo habían utilizado hasta ahora.

El problema venía en los años, pues la empresa utilizaba un sistema partido, el ejercicio empezaba en julio y finalizaba en junio del siguiente.

Un Saludo.

Neftali [Germán.Estévez] 27-07-2006 10:21:12

...ya pensando cosas raras.
¿El programa utiliza packages o está compilado en un único EXE?

Al González 28-07-2006 07:16:39

Componentes con el mismo nombre en clase padre e hija
 
¡Hola a todos!

Janlo: Conozco el fenómeno. Me ha sucedido en algunas ocasiones, en todas ellas involucrada la herencia visual (o plantillas) de Delphi.

Supongamos que tienes una forma F1 y una forma F2 que deriva de F1 (TF2 es clase hija de TF1, por lo tanto hereda todo lo que TF1 contenga).

El programador 1 agrega un componente de nombre "Matri" a F2 y luego guarda y cierra el proyecto.

Posteriormente viene el programador 2, quien abre el proyecto y su forma plantilla F1 y, sin estar abierta la forma F2, agrega a F1 un nuevo componente de nombre "Matri" o cambia por "Matri" el nombre de alguno de los componentes ya existentes en esa forma. Luego guarda y cierra el proyecto.

Más tarde regresa el programador 1, abre el proyecto e intenta abrir la forma F2. ¿Qué pasa? Delphi se da cuenta que la forma F2 es de clase (TF2) hija de TF1; por lo tanto, primero carga los elementos que le fueron definidos en tiempo de diseño a F1, entre ellos el objeto "Matri" (todos ellos a ser heredados por F2), para luego cargar el resto del diseño —lo establecido en F2—. Cuando está cargando el diseño particular de F2 (su archivo .dfm), Delphi nota que ahí se especifica otro "object Matri" (ver contenido textual de un archivo .dfm), pero la forma ya hubo cargado otro "object Matri" del archivo .dfm de F1, y como un componente (en este caso la forma) no puede adueñar a otros dos componentes que lleven el mismo nombre (Matri de TF1 y Matri de TF2) pues entonces el entorno de Delphi arroja el mensaje de error que nos presentas.

Es decir, esto pasa, generalmente*, cuando se establece en una forma un componente de nombre igual al de otro componente que ya existe en una forma derivada de ella. El mensaje de error aparecerá cuando se intente cargar la segunda forma (la derivada por herencia visual), ya sea en tiempo de diseño o incluso en tiempo de ejecución al instanciarla (usualmente llamando a Application.CreateForm).

*NOTA: Mencioné "generalmente" porque me ocurrió algo muy extraño recientemente: Trabajaba en Delphi 7 con un proyecto que tiene varias formas con herencia visual, de pronto mi máquina tuvo un bloqueo que me obligó a forzar el cierre de las aplicaciones. Cuando volví a cargar el proyecto en Delphi, una de las formas derivadas no logró abrirse correctamente, presentándose en pantalla el mensaje de error que nos ocupa una y otra vez. Cuando examiné el interior del archivo .dfm noté que muchas declaraciones de componentes que debían iniciar con "inherited" —para indicar que el componente era heredado (provenía) de otra clase de forma— iniciaban con "object" —indicación de que el componente fue agregado en la clase de la actual forma—. Tuve que editar el texto del archivo .dfm cambiando varias decenas de "object" por "inherited" para recuperar el estado normal de la forma derivada.

En resumen, mi consejo para solucionar este problema es que te asegures de que no haya nombres de componentes repetidos a través de la jerarquía de clases que da herencia visual a las formas de tu proyecto.

Espero esto sea de utilidad.

Un abrazo bien cargado.

Al González. :)


La franja horaria es GMT +2. Ahora son las 11:11:48.

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