PDA

Ver la Versión Completa : Problemas accediendo a otro Form


MaMu
26-10-2008, 14:16:15
Tengo 3 Forms, A,B y C. A es el principal y es el unico que se crea al ejecutar la aplicació.

B se crea desde A:


B:=TB.Create(self);
B:=Show;
B tiene una Memory Tabla (RxMemorData)


y C se crea desde B:


C:=TB.Create(self);
C:=Show;
C tambien tiene una Memory Tabla (RxMemorData)


Resulta que si quiero acceder a la tabla en memoria de B, me tira la exception
"Error bla bla...in molule 0124SXXXX bla bla".
Probando, me di cuenta que no puedo acceder a nada de B, todo lo que intente cambiar en B, me tira el mismo error.
B, tiene declarado en uses UnitC; y C tiene declarado uses UnitB;
Creo las formas, y al cerrar, las libero y destruyo sin dificultad, pero no se porque no me deja acceder, que estoy haciendo mal??? no puedo ni cambiar esto desde C:

B.Label1.Caption:='te cambio';

NOTA: estoy con Delphi 5

dec
26-10-2008, 14:50:06
Hola,

¿Esas variables "B" y "C" son "globales"? Si son locales es normal que no estén disponibles más allá del método en que se usan...

MaMu
27-10-2008, 00:33:05
Hola,

¿Esas variables "B" y "C" son "globales"? Si son locales es normal que no estén disponibles más allá del método en que se usan...

B = Form2, C= Form3.
Al estar en Form3, yo puedo hacer desde ahi:

Form2.Label1.Caption:='sss';

El problema esta que cuando ejecuta cualquier instruccion que acceda desde el Form3 al Form2 se produce el error. Los puedo usar sin problemas, y son visibles entre los dos, ya que cada uno tiene declarado la Unit del otro y viceversa.

enecumene
27-10-2008, 00:49:54
Hola, tal vez me equivoque (seguro me equivoco :p), pero verifica si los dos forms está en alvailable forms o uno de los dos en Auto Create. No sé sólo estoy especulando :p

Saludos.

dec
27-10-2008, 01:09:27
Hola,

Yo también, por decir algo, vería de hacer lo que te propones en un proyecto nuevo, sólo para probar. Si tus razonamientos no fallan en el proyecto para pruebas, entonces debe haber algo en tu proyecto actual que está jorobando el asunto. Sé que igual es una tontería, pero, es lo único que se me ocurre ahora mismo. :rolleyes:

Neeruu
27-10-2008, 01:28:27
Hola a todos!!!!
Por las dudas no seria "TC" en ves de "TB"


//C:=TB.Create(self);
C:=TC.Create(self);
C:=Show;
C tambien tiene una Memory Tabla (RxMemorData)



Saluda Atte Neeruu!!!:)

enecumene
27-10-2008, 01:32:31
Hola a todos!!!! Por las dudas no seria "TC" en ves de "TB"Código Delphi [-] (http://www.clubdelphi.com/foros/#)//C:=TB.Create(self);C:=TC.Create(self);C:=Show;C tambien tiene una Memory Tabla (RxMemorData)


Saluda Atte Neeruu!!!:)

¡Vaya!, que mala vista tenemos, pues aparentemente ese es el problema, ¡Hostia!, nos estamos poniendo viejos joder :mad::(:D

MaMu
27-10-2008, 03:55:00
Hola a todos!!!!
Por las dudas no seria "TC" en ves de "TB"


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
//C:=TB.Create(self);
C:=TC.Create(self);
C:=Show;
C tambien tiene una Memory Tabla (RxMemorData)






Saluda Atte Neeruu!!!:)

No, es como tu dices, es el precio de Copy and Paste, solo que me falto cambiarlo, fue un desliz tipeando para el foro, pero en el código delphi lo tengo correctamente.

enecumene Ambos forms estan en Available, y ambos son creados en RunTime.
A crea a B, y B crea C, pero C no puede acceder a B, tira error.

Saludos

Delphius
27-10-2008, 04:28:06
Hola MaMu,
¿Te compila ese código?
Porque me parece raro observar algo como:


B := TB.Create(Self);
B := Show;


¿No sería B.Show?:confused:

Por otro lado, el único modo de que B haga uso de C y que C también lo haga con B es que uno de los dos (ya sea B o C) tenga declarados la correspondiente unidad en uses pero en implementation y el otro en interface. De otro modo te advertirá con un error que dice algo similar a "Circular Reference".

Sin conocer el error exacto no te sabríamos ayudar. Disculpa que sea un tanto pesado pero el bla, bla no ayuda en nada.
Además, tendríamos que ver apropiadamente el código que tienes.

Saludos,

MaMu
27-10-2008, 04:57:59
Hola MaMu,
¿Te compila ese código?
Porque me parece raro observar algo como:


Código Delphi [-] (http://www.clubdelphi.com/foros/#)
B := TB.Create(Self);
B := Show;





¿No sería B.Show?:confused:

Por otro lado, el único modo de que B haga uso de C y que C también lo haga con B es que uno de los dos (ya sea B o C) tenga declarados la correspondiente unidad en uses pero en implementation y el otro en interface. De otro modo te advertirá con un error que dice algo similar a "Circular Reference".

Sin conocer el error exacto no te sabríamos ayudar. Disculpa que sea un tanto pesado pero el bla, bla no ayuda en nada.
Además, tendríamos que ver apropiadamente el código que tienes.

Saludos,

Si, es B.Show, lo que pasa es que, como dije antes, a veces uno copia y pega, y se olvida de modificar.
El error, es del tipo Error read XXXxxxx in module XXXxxx y bla bla bla.
Tanto B como C, tienen declara las Units, en el uses de la implementation.
El tema es que, B Crea a C, y C, solo cambia un Label en B (en teoria, puesto a que eso tambien tira el mismo error).
Como sería la forma correcta de declararlos?

Saludos

Delphius
27-10-2008, 05:05:41
MaMu,
Me gustaría conocer el nombre y apellido del error, y no el bla bla;)

Como he dicho,
Una de las units debe tener el uses en implementation y la otra en interface. Algo como esto:

Unit unitX;
...

interface

uses UnitY;
...


Unit UnitY;
...

implementation

uses UnitX;
...

¿Se ve la diferencia?

Saludos,

pablopessoa
27-10-2008, 17:41:03
entiendo que por ahi lo haces de esa forma para no crear todos los Forms cuando se ejecuta el programa, pero probaste si te sigue tirando el error si en el source del proyecto haces que se creen los tres formularios? entonces el source te quedaria asi :


Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);


pero tendrias que comentar el codigo donde se crean los form2 y 3

pablopessoa
27-10-2008, 17:44:10
perdon me exprese re mal, la idea es que los form2 y 3 no los crees en tiempo de ejecucion , sino que cuando se cargue el programa se creen los tres.