Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Formulario Auxiliar (https://www.clubdelphi.com/foros/showthread.php?t=16526)

bbjb 01-12-2004 09:28:38

Formulario Auxiliar
 
Saludos,

Tengo un formulario auxiliar que generó en modo ejecución y utilizo para establecer unos filtros previos a un listado.

Una vez fijados estos valores y regresar al principal, no puedo recuperar los valores del form.auxiliar.

El código que utilizo es el siguiente:
Código:

TFauxiliar = class(TForm)
public
  Propiedad: String;
end;
.....................

//en el evento FormClose del auxiliar
if ModalResult = mrOk then
  Propiedad := el valor que necesitas;
.......................

//Formulario principal llamará así a auxiliar
with TFauxiliar.Create(nil) do
begin
  if ShowModal = ID_OK then
    Edit1.Text := Propiedad;

  Free;
end;

Me provoca un error de "Violación de acceso a la dirección ...."

He seguido el hilo de roman pero sin tener éxito.
http://www.clubdelphi.com/foros/show...ecucion+create

Alguna sugerencia???

afxe 01-12-2004 09:38:03

Prueba esto en la llamada:

Código:


//Formulario principal llamará así a auxiliar
with TFauxiliar.Create(Self) do
begin
  if ShowModal = mrOK then
        Edit1.Text := Propiedad;
  Free;
end;


DarKraZY 01-12-2004 09:38:06

Acabo de probarlo y a mí me funciona correctamente. Para terminar de probarlo he puesto un TButton en el TFauxiliar asignándole "mrOk" en la propiedad "ModalResult" del TButton.

Er_Manué 01-12-2004 09:42:36

Prueba a crear el formulario auxiliar con Application.CreateForm(TFauxiliar, Fauxiliar);

Código:

TFauxiliar = class(TForm)
public
  Propiedad: String;
end;
.....................

//en el evento FormClose del auxiliar
if ModalResult = mrOk then
  Propiedad := el valor que necesitas;
.......................

Application.CreateForm(TFauxiliar, Fauxiliar);

//Formulario principal llamará así a auxiliar
with Fauxiliar do
begin
  if ShowModal = ID_OK then
    Edit1.Text := Propiedad;

  Free;
end;

A ver si asi hay suertecilla y funciona :p

Salu2
Er_Manué

Neftali [Germán.Estévez] 01-12-2004 09:48:15

¿Exactamente en qué línea te da el error? ¿Lo has "debuggado" (...ufff que mal suena esto...)? ¿No estarás liberando el form auxiliar en el OnDestroy con caFree?

El código en sí no parece tener errores; ¿Tienes algo més puesto en los eventos de Close/destroy?

bbjb 01-12-2004 10:37:38

He probado con vuestros consejos y he de comunicaros que el ganador ha sido ...... Er_Manué (es broma)

Haciendo Application.CreateForm(TFauxiliar, Fauxiliar) puedo recuperar los valores sin ningún problema, aunque sigo mosqueadillo de porque no ha funcionado con TFauxiliar.Create([nil,self]) porque la única programación que tengo en el auxiliar es la de asignar a la variable pública el valor del objeto.

En fín, Muchiiiiiiiiiiiisimas Gracias a tod@s

Er_Manué 01-12-2004 10:51:05

weeeeeeee!! gracias!! plas plas muchas gracias!! nunca espere esto!! sniff.... :D

A mi me pasaba lo mismo si no ponia los formularios en auto-create Forms, que no es más que Application.CreateForm(..,..); pero no tengo demasiado claro el por qué, pero funciona ;)

Salu2

roman 01-12-2004 16:43:59

Una crítica constructiva:

La programación no es cosa de suerte. Antes de adoptar una "solución" porque quien-sabe-por-qué-pero-así-me-ha-funcionado es recomendable revisar y entender el porque de las cosas. En este caso, por ejemplo, se termina por utilizar algo que por regla general se contra recomienda: dejar los formularios en el AutoCreate o acceder directamente a las variables globales que Delphi declara, y todo cuando la técnica original debe funcionar correctamente pero alguna otra cosa nos está estorbando. Quizá, como dice Neftali, se pone Action := caFree en el evento OnClose del formulario auxiliar.

// Saludos

Er_Manué 01-12-2004 17:44:27

Estoy totalmente de acuerdo contigo Roman, lo que sucede que normalmente debido a esos "maravillosos plazos de entrega" que tan holgadamente nos "proponen" nuestros "queridos" jefes :D si algo funciona, ¡ ni lo toques ! por que no hay más tiempo :( pero realmente eso únicamente provoca arrastrar cada vez más errores, como una bonita bola de bugs...digo de nieve ;)

Salu2


La franja horaria es GMT +2. Ahora son las 05:24:13.

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