Delphi - Llamada entre ventanas

 
Vista:

Llamada entre ventanas

Publicado por Javier Mamana (2 intervenciones) el 02/02/2011 20:33:38
Que tal?

Estoy usando un paquete (.bpl) que contiene todos los formularios que se usan en el proyecto. El problema se da así:

En el formulario 1 instancio el 2:

fmFormularioDos:= TfmFormularioDos.Create(nil);

Ahora, cuando desde el formulario 2 quiero llamar al 1 o algún componente de este me da un error. Por ejemplo:

if fmFormularioUno.cActividad.State = dsInsert then
begin
Self.Caption := 'Nueva Actividad';
cbTipo.ItemIndex := 0;
fmFormularioUno.cActividad.FieldByName('codactividad').Value := 0;
end;

Usando un Try para obtener el mensaje técnico lo que obtengo es:

"AccessViolation at address 005BD9D0 in module 'Fuentes.bpl'. Read of address 000002F8'.

La dirección de memoria es donde esta la llamada al formulario 1. Lo que menciona de 'Fuentes.bpl' es lo que mencione donde están todos los formularios/fuentes que se usan en el proyecto.

Agradezco su ayuda!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Llamada entre ventanas

Publicado por skull leader (80 intervenciones) el 08/02/2011 17:26:37
y si en donde pones fmFormularioDos:= TfmFormularioDos.Create(nil); pones

fmFormularioDos:= TfmFormularioDos.Create(self);

o quizas:

fmFormularioDos:= TfmFormularioDos.Create(Application);

a ver si funciona...

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada entre ventanas

Publicado por Javier (2 intervenciones) el 09/02/2011 15:40:18
Hola skull leader!

He probado lo que comentas y no ha funcionado.. El problema es como si no reconociera el mismo formulario uno (por el self).

El problema se da incluso al llamar a cualquier componente en el mismo formulario uno. Por ejemplo:

fmFormularioUno.cbCombo.............ect

tira un error de AccessViolation. En el 'initialization' se hace un RegisterClass(TfmFormularioUno) pero es como si no quedara registrado.

Gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada entre ventanas

Publicado por skull leader (80 intervenciones) el 11/02/2011 23:04:33
si los incluyes entre si? en los uses?

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada entre ventanas

Publicado por Sebas (6 intervenciones) el 03/03/2011 22:33:36
Si desde el uno creas el dos y desde el dos querés referirte al uno necesitás pasarle al dos lo instanciado en el uno.

ejemplo:

si hacés un:
fmFormularioDos:= TfmFormularioDos.Create(nil); estás dejando en nil la dirección del padre

si hacés un:
fmFormularioDos:= TfmFormularioDos.Create(self); le estás diciendo al dos que el padre es el uno, entonces, desde el dos te tenés que referir al uno haciendo:

self (dos).parent.....

también podés hacerle un metodo y pasarle el objeto al 2 si te resulta más entendible, onda:

fmFormularioDos:= TfmFormularioDos.Create(nil);
fmformulariodos.SetVentanauno(self);

y en el dos hacés tomás ese parametro y lo usás para referenciarte a la uno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar