Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2003
Muten Muten is offline
Miembro
 
Registrado: jul 2003
Posts: 33
Poder: 0
Muten Va por buen camino
Question Acceso a método d 1 form dsd Módulo d Datos

Lo he hecho ciento de veces, y nunca me ha pasado nada, pero de buenas a primeras, al hacer referencia en un módulo de datos a un método público de un formulario, me da un error de memoria..
- Incluyo la unidad dentro del módulo de datos.
- Llamo al método desde el evento BeforePost de un DataSet que se encuentra en el módulo de datos.
- Cuando la ejecución del programa entra en el método y hace referencia a algún componente del formulario (p. ej. button1.Focused), se produce el error de acceso de memoria.

He observado (con un breakpoint) que al llamar al método desde el módulo de datos ( Form1.ValidaCampos(); ), la variable Form1 es igual a nil.

La única forma de que funcione bien, es usando una variable global a la q le asigno en el evento OnCreateForm el valor de "self" y anteponiendo esta variable a todos los componentes dentro del método. Pero me parece algo chapucero.

He estado observando, y en la unidad donde tengo definido el formulario, no puedo hacer referencia a él. Es decir: si pongo Form1.Caption al mirar con un watch su valor, me sale también "nil".
No sé si es debido al uso de componentes JFActiveSoft, o pq el formulario lo he creado dinámicamente... lo que sea, me esta dando mucho dolor de cabeza.
Un saludo!

Última edición por Muten fecha: 25-11-2003 a las 11:24:03.
Responder Con Cita
  #2  
Antiguo 25-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
si Form1 = nil es porque este formulario no ha sido creado y, por eso el Acces Violation

Funciones de este tipo, son recomendables ponerlas en Units totalmente a parte de los formularios y acceder a ellas tanto desde los DataModules como desde los Forms (poniendo el uses pertinente, claro)

Espero te sirva
Responder Con Cita
  #3  
Antiguo 25-11-2003
Muten Muten is offline
Miembro
 
Registrado: jul 2003
Posts: 33
Poder: 0
Muten Va por buen camino
Gracias por contestar cadetill.

El formulario está creado dinámicamente, es un formulario de mantenimiento de una tabla Firebird.

Cuando el usuario da la orden de grabar los datos, con el método controlo que se hayan metido todos los datos no nulos, para evitar la excepción. Para ello recorro los componentes (dbedit) comprobando si ha introducido algo, si no es así, doy un mensaje de alerta y le mando el foco al dbedit.

Pienso que lo mejor es hacer un método, ya q voy a trabajar con componentes del formulario.

PD. Ya está solucionado el problema, creaba el formulario de esta manera:

procedure TfrmPpal.JfMenuItem9Click(Sender: TObject);
var
form3: Tform3;
begin
{ Creamos la Form}
form3 := Tform3.Create(self);
Try // La hacemos visible
form3.Showmodal;
Finally //Liberamos la memoria, pase lo que pase
form3.Free;
end;

end;

**He visto otro ejemplo para crear el formulario:

procedure TfrmPpal.JfMenuItem9Click(Sender: TObject);
begin
Application.CreateForm(Tform3,form3);
with form3 do
try
ShowModal;
finally
Free;
end;
end;

Así va bien . Supongo q la diferencia entre una forma y la otra está en q antes creaba una variable local y ahora estoy usando una global a la aplicación.. ¿me equivoco?

Saludos a todos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:41:06.


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
Copyright 1996-2007 Club Delphi