PDA

Ver la Versión Completa : Error "A component named xxx already exists"


The Cid James
27-10-2017, 08:16:45
Cree un form nuevo con un label y dos botones pero cuando quiero abrirlo me sale esto

https://image.prntscr.com/image/16dfWdQYQk6jQ-DItW6p3g.png

el boton que llama al form solo tiene esto
procedure Tflistadoproductos.BitBtn7Click(Sender: TObject); //Boton insertar producto
begin
fCantidad.Create(self).ShowModal;
end;

Prove mil nombres distinos para los botones y el label y sigue saliendo no se que puede hacer o hacer al respecto

Neftali [Germán.Estévez]
27-10-2017, 10:23:24
Perece que hay algo en ese formulario que no está bien.
Es el error es claro, pero con la información que das no se puede saber mucho más.

Habría que saber si ese formulario crea componentes en ejecución, o tiene algo mal en el DFM.

The Cid James
27-10-2017, 10:44:18
Perece que hay algo en ese formulario que no está bien.
Es el error es claro, pero con la información que das no se puede saber mucho más.

Habría que saber si ese formulario crea componentes en ejecución, o tiene algo mal en el DFM.

Pues es toda la informacion que poseo no es que tenga mucho que digamos, de echo incluso con un "label" llamado lo que se te ocurra (prove mil nombres distintos en NAME y nada) también tira el error, y si creo otro form y le pongo el componente que sea pasa exactamente lo mismo, la única form que me deje abrir es un form totalmente limpio.

que es DFM? y a que te referis con componentes en ejecución?

También probé crear un proyecto nuevo nuevo y copiar todas los .pas e importarlas directamente no me abre ningún form y me tira ese mismo error al cargar el primer componente

Neftali [Germán.Estévez]
27-10-2017, 11:46:17
Pues es toda la informacion que poseo no es que tenga mucho que digamos, de echo incluso con un "label" llamado lo que se te ocurra (prove mil nombres distintos en NAME y nada) también tira el error, y si creo otro form y le pongo el componente que sea pasa exactamente lo mismo, la única form que me deje abrir es un form totalmente limpio.


Me refiero que el problema lo tienes en el form fCantidad, y ese es el que no has puesto.
Tiene pinta de que ese form es el que tiene el problema.
Si puedes, comprímelo y adjunta el ZIP al mensaje.



que es DFM?
El DFM es "la mitad" de un formulario.
Un formulario en Delphi se componen del código (fichero .PAS) y la parte visual (fichero DFM).
Para trabajar con un formulario debes tener ambos ficheros. Se llaman igual y cambia su extensión.

Tendríamos que vcerlos para poder saber si hay algun problema.


y a que te referis con componentes en ejecución?

En Delphi puedes crear un componente de la forma "normal" que es arrastrándolo en diseño sobre el formulario, pero también puedes crearlos cuando el programa se está ejecutando (a eso llamamos crearlos en ejecución).

Si en diseño pones 2 botones en un form y les intentas asignar el mismo nombre, te da un error:

https://s26.postimg.org/wafl6h3yh/Captura_2676.png

Si cuando los estás creando en ejecución les da el mismo nombre obtienes un error similar (a este o al que has puesto tú).
POr eso lo preguntaba.

The Cid James
27-10-2017, 12:02:51
Te dejo todo el proyecto para que veas, y no solo me pasa con ese form me pasa con cualquiera nuevo que cree asi que algo anda mal y el debug mode me tira el error pero no me dice donde

Si estoy creando el form en ejecucion, pero no solo me pasa con un nombre como dije probe muchos nombres distintos y sigue pasando asi que ni idea.

Descarga (https://drive.google.com/open?id=0By3qnPUi_aIFYVZlREJPcnVNOG8)

Casimiro Notevi
27-10-2017, 12:07:46
Si en diseño pones 2 botones en un form y les intentas asignar el mismo nombre, te da un error:Obviamente.

Caminante
27-10-2017, 18:51:37
Hola

A mi me pasaba eso cuando estaba usando frames y queria ponerlos en un panel. El problema fue que al crearlos les asignaba el mismo owner y saltaba el error.

Se arreglo cuando los fui creando dentro de un page control asignandole un owner distinto (Cada tabsheet).

No se si sea el caso pero espero sea util

Saludos

The Cid James
28-10-2017, 01:50:39
Hola

A mi me pasaba eso cuando estaba usando frames y queria ponerlos en un panel. El problema fue que al crearlos les asignaba el mismo owner y saltaba el error.

Se arreglo cuando los fui creando dentro de un page control asignandole un owner distinto (Cada tabsheet).

No se si sea el caso pero espero sea util

Saludos

No tengo idea de lo que me decis pero estoy usando un tpanel donde dokeo un form podria ser eso?

Donde veo los owners de los componentes?

Neftali [Germán.Estévez]
29-10-2017, 19:01:39
Yo si veo la pantalla de productos correctamente.

https://s26.postimg.org/t3cbeqlop/Captura_1928.png

De todas formas para llegar a ella, hay que corregir un eror que tienes en este procedimiento:


procedure Tflistadoproductos.BitBtn4Click(Sender: TObject);
begin
fmodulo.qProductos.Active := true;
fmodulo.qProductos.Insert;
fproductos.Create(self).ShowModal;
end;


Debes llamar al Create con la Clase(Tfproductos), no con la instancia/variable (fproductos).

The Cid James
30-10-2017, 02:18:33
El problema es con el botón seleccionar productos no con agregar, ese botón llama a fcantidad, en realidad con cualquier form nuevo que cree y no me deja de salir el error ya me ha llegado a desesperar es bastante frustrante porque no me marca de donde viene el error. En realidad es con cualquier form nuevo que creee y le ponga cualquier componente (limpios o sin componentes si lo llama)
Emm nunca entendí la diferencia entre usar tf y f voy a buscar al respecto para no comentar esos errores

Neftali [Germán.Estévez]
30-10-2017, 17:59:40
Emm nunca entendí la diferencia entre usar tf y f voy a buscar al respecto para no comentar esos errores

Pues no es una cosa trivial.

En un caso te estás refiriendo a la clase que en algún sitio tendrás defida como:


Tflistadoproductos = class (Tform)
private
....
public
...
end;
Y en el segundo caso, te estás refiriendo a una varianble/objeto/instancia definida con ese tipo.
Sería como hacer referencia a TEdit (Clase) o a un edit1 (una instancia de la clase TEdit).

The Cid James
30-10-2017, 20:55:39
Pues no es una cosa trivial.

En un caso te estás refiriendo a la clase que en algún sitio tendrás defida como:


Tflistadoproductos = class (Tform)
private
....
public
...
end;
Y en el segundo caso, te estás refiriendo a una varianble/objeto/instancia definida con ese tipo.
Sería como hacer referencia a TEdit (Clase) o a un edit1 (una instancia de la clase TEdit).

Gracias por la explicación fue de lo mas claro.
Con respecto al error, ya no se que hacer estoy totalmente frustrado, estoy avanzando con otros temas pero estancado ahí y no tengo idea como solucionarlo

The Cid James
31-10-2017, 04:04:40
Encontre el error!!! era como decis la forma de llamar de los form que estaba usando, cambie todo al llamado por instancia y ahora no me sale el error!!! gracias!