Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problema con formularios que se llaman mutuamente (https://www.clubdelphi.com/foros/showthread.php?t=38215)

Patricio 06-12-2006 21:07:22

problema con formularios que se llaman mutuamente
 
Hola gente tengo 3 formularios uno A, B y C. Cada uno de estos formularios tiene dos botones para llamar a los otros 2 formularios. Por ej, en A hay un boton para llamar a B y otro para C. Lo mismo en B y C. La llamada la hago de la siguiente manera
C:TFormularioC;
begin
C := TFormularioC.Create(A);
C.showmodal;
C.release;

el problema que tengo es que si A llama a C, C llama a A, y esto lo hago 4 veces, cuando los empiezo a cerrar me da un error.
Obviamente es algo que puede pasar rara vez porque de uno se llama a otro y a lo sumo una vez mas, pero alguien hace algo parecido de otra manera.
Uso Delphi 5 e Interbase

Ñuño Martínez 06-12-2006 21:23:48

Cita:

Empezado por Patricio
el problema que tengo es que si A llama a C, C llama a A, y esto lo hago 4 veces, cuando los empiezo a cerrar me da un error.

Estoy por asegurar con que es porque cierras algún formulario antes de tiempo, pero para estar seguros, ¿cual es exactamente el error que muestra?

Crandel 06-12-2006 23:14:02

Hola Patricio, primero que nada, no es una practica que recomiende que todos los formularios se llamen mutuamente, pero supongamos que es necesario para tu aplicación.

Lo que estas haciendo con tu codigo es creando un objeto de cada uno de tus formularios dinamicamente, posiblemente tu error provenga por ahi aunque con el codigo como lo presentas no deberia dar problemas.

De igual mandera, podrias implementar fijandote en las opciones de tu proyecto que todos los formularios se creen automaticamente, menu Project/Options.

Luego simplemente los vas llamando A.Show o A.Shomal, según necesites.

De esta forma, vas llamando a los formularios para que aparescan en pantalla y no creando nuevas instancias de los mismos.

Suerte.

pd: si seguis con el error decinos cual es y que otra cosa estas haciendo

Patricio 07-12-2006 20:00:48

ok
 
antes que todo gracias por las respuestas, el error era un error de windows con una ventana llena de cosas como para repetirla aca. Ahora, hay alguna forma de saber si un formulario ya esta creado?
por ejemplo antes de crear el formulario A ver si esta creado y si es asi hacer el Show o Showl, cual uso para que cosa de estos dos?

Patricio 07-12-2006 20:22:39

mensaje de error
 
Ahi hice una prueba se crea el formulario A, de este llama a B y cuando B vuelve a llamar a A, puse A.Showmodal y me tiro el siguiente error:
EInvalidOperation. cannot make a visible window modal

si pongo A.Show, lo muestra pero se congela, como que falta algo. y no responde mas

Crandel 08-12-2006 03:15:06

Por que no haces un pequeño ejemplo con dos formularios que se llamen y que te genere el error y lo subes aca, xq yo lo probe y no tengo ningun problema.

Lepe 08-12-2006 15:57:32

Cita:

Empezado por Patricio
cannot make a visible window modal

La ventana en cuestión ¿no será un MDIChild no? si lo es: Una MDIChild no puede mostrarse como modal. Primero has de cambiar la propiedad FormStyle.

Saludos

Patricio 09-12-2006 16:31:20

No es un Child
 
Gracias por las informaciones que van dando, es un formulario normal

El error ocurre en forma aleatoria y cuando se llaman entre 4/5 veces cada formulario, cosa q es medio dificil en la realidad, pero como el software corre en red capaz que despues cuando subo esta actualizacion me falla.
El mensaje que aparece es este

Proyect pepe.exe reaised exception class EaccessViolation with message ‘ Access violatio at address 004031D2 in module pepe.exe. Read of address FFFFFFD0. Process Stopped.

Saludos

fjcg02 09-12-2006 19:12:17

No se si te servirá de algo este código, pero por si acaso te lo incluyo.
Yo generalmente n ocreo varias veces un formulario ( a no ser que sea necesario, claro ), sino lo que hago es saber desde donde se ha llamado por si hay que hacer diferentes acciones.
Código Delphi [-]
procedure AbriFormulario ;
begin
// si el formulario no ha sido previamente creado, lo creo. 
// Luego doy valores a las variables del formulario que necesito
if Form2= nil then Form2 := TForm2.Create(Form2);
  with Form2 do begin
    Caption:= 'Titulo formulario';
    Show;
  end;
end;

Un saludo

Patricio 12-12-2006 19:38:52

Gracias
 
Lo voy a tener en cuenta. Gracias.


La franja horaria es GMT +2. Ahora son las 09:21:07.

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