Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2009-06

EXC_BAD_ACCESS al hacer un close de un form

14 messages · 4 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Giuseppe Luigi Punzi Ruiz

Hola a todos,

A ver si me pod�is echar un cable, que fijo es una tonter�a, pero no caigo.

Estoy haciendo un peque�o programilla para hacerme de nuevo con ObjectPascal.

    form := TFrmClientes.Create(self);
    form.ShowModal;
    etc....

El problema, lo tengo al cerrarlo. Para empezar, tengo un BitButton que ignora el contenido se su evento onlick (donde hago un ApplyUpdates al Query, y un close al form), pero me cierra el form (tengo el Modalresult a mrNone). He puesto un bot�n cuando me he dado cuenta de �sto, y con el bot�n, me d� la excepci�n del t�tulo, y el depurador me abre el archivo customform.inc en la linea 1596.

   if fsModal in FFormState then
     ModalResult := mrCancel

Alguna idea?

Giuseppe Luigi Punzi Ruiz
Blog: http://www.lordzealon.com
Twitter & Skype & GoogleTalk accounts: glpunzi

Reply by email

JoshyFun
to Giuseppe Luigi Punzi Ruiz

Hello Giuseppe,

Wednesday, June 24, 2009, 9:31:39 PM, you wrote:

GLPR> El problema, lo tengo al cerrarlo. Para empezar, tengo un BitButton GLPR> que ignora el contenido se su evento onlick (donde hago un GLPR> ApplyUpdates al Query, y un close al form), pero me cierra el form GLPR> (tengo el Modalresult a mrNone). He puesto un bot�n cuando me he dado GLPR> cuenta de �sto, y con el bot�n, me d� la excepci�n del t�tulo, y el GLPR> depurador me abre el archivo customform.inc en la linea 1596. GLPR> if fsModal in FFormState then
GLPR> ModalResult := mrCancel

GLPR> Alguna idea?

Si no vemos como haces el close no podemos ayudar mucho. Parece que haces el close con un Free :-?

Best regards, JoshyFun

Reply by email

Giuseppe Luigi Punzi Ruiz

Hola joshy.

No, despu�s del applyupdate hago:
Frmclientes.close

Esa l�nea es la que lleva al customform.inc

Enviado usando Real Mail de Vodafone.

Earlier message 32 lines
-----Original Message----- From: "JoshyFun" <joshyfun en gmail.com> Sent: Wed, 24 Jun 2009 23:21:29 +0200 To: "Spanish version of Lazarus List" <lazarus-es en lists.lazarus.freepascal.org> Received: 24-Jun-2009 23:21:41 +0200 Subject: Re: [Lazarus-es] EXC_BAD_ACCESS al hacer un close de un form Hello Giuseppe, Wednesday, June 24, 2009, 9:31:39 PM, you wrote: GLPR> El problema, lo tengo al cerrarlo. Para empezar, tengo un BitButton GLPR> que ignora el contenido se su evento onlick (donde hago un GLPR> ApplyUpdates al Query, y un close al form), pero me cierra el form GLPR> (tengo el Modalresult a mrNone). He puesto un bot�n cuando me he dado GLPR> cuenta de �sto, y con el bot�n, me d� la excepci�n del t�tulo, y el GLPR> depurador me abre el archivo customform.inc en la linea 1596. GLPR> if fsModal in FFormState then GLPR> ModalResult := mrCancel GLPR> Alguna idea? Si no vemos como haces el close no podemos ayudar mucho. Parece que haces el close con un Free :-? -- Best regards, JoshyFun

Reply by email

Giuseppe Luigi Punzi
to JoshyFun: GLPR> Hola joshy. GLPR> No, despu�s del applyupdate hago: GLPR> Frmclientes.close GLPR>…

El jue, 25-06-2009 a las 14:21 +0200, JoshyFun escribi�:

Show quoted text 42 lines
Hello Giuseppe, Thursday, June 25, 2009, 8:20:56 AM, you wrote: GLPR> Hola joshy. GLPR> No, despu�s del applyupdate hago: GLPR> Frmclientes.close GLPR> Esa l�nea es la que lleva al customform.inc Los EXC_BAD_ACCESS son dif�ciles de corregir, suelen venir provocados por una corrupci�n de la memoria, pero puede venir de muy atr�s en el c�digo. Lo m�s probable es que hayas (digo tu por que es m�s probable que tu codigo est� mal que el de Lazarus) liberado alg�n recurso con un free por alg�n sitio pero lo hayas "reusado" sin querer. Para ello cambia todos los free de tu c�digo por "FreeAndNIL" si no lo has hecho ya. Otra posibilidad es que algo en los objetos que usas con la base de datos hagan algo mal debido a un bug en el c�digo, as� que la �nica soluci�n que veo a tu problema es que reduzcas tu c�digo a la m�nima expresi�n para que lanze el error. Por la linea del error en customform.inc, evento close, el problema es que el form que est�s manejando tiene la memoria corrompida, esto es apunta a una direcci�n que ha sido ya liberada por el motivo que sea. Un problema t�pico de esto, pero que no ser�a aplicable en este caso es hacer algo as� en una funci�n: var f: Miform; begin f:=MiForm.Create; f.show; f.free; end; Ya que el show se ejecuta y antes de que se cierre el form ya se libera, lo que pueda dar problemas de este tipo. Usa el debugger y comprueba que el form "Self" siempre apunta a la misma direcci�n, para ello antes del f.showmodal apunta en un papel el valor de "f", y en el evento que haces el close, pon una linea de c�digo que compruebe el valor de self. Ambos tienen que coincidir.

Luego le echo una ojeada a lo que me comentas, gracias ;)

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090625/d6dc5e8f/attachment.html>

Reply by email

JoshyFun
to Giuseppe Luigi Punzi Ruiz: Hola joshy. No, despu�s del applyupdate hago: Frmclientes.close Esa l�nea es la que…

Hello Giuseppe,

Thursday, June 25, 2009, 8:20:56 AM, you wrote:

GLPR> Hola joshy.
GLPR> No, despu�s del applyupdate hago:
GLPR> Frmclientes.close
GLPR> Esa l�nea es la que lleva al customform.inc

Los EXC_BAD_ACCESS son dif�ciles de corregir, suelen venir provocados por una corrupci�n de la memoria, pero puede venir de muy atr�s en el c�digo. Lo m�s probable es que hayas (digo tu por que es m�s probable que tu codigo est� mal que el de Lazarus) liberado alg�n recurso con un free por alg�n sitio pero lo hayas "reusado" sin querer. Para ello cambia todos los free de tu c�digo por "FreeAndNIL" si no lo has hecho ya. Otra posibilidad es que algo en los objetos que usas con la base de datos hagan algo mal debido a un bug en el c�digo, as� que la �nica soluci�n que veo a tu problema es que reduzcas tu c�digo a la m�nima expresi�n para que lanze el error.

Por la linea del error en customform.inc, evento close, el problema es que el form que est�s manejando tiene la memoria corrompida, esto es apunta a una direcci�n que ha sido ya liberada por el motivo que sea. Un problema t�pico de esto, pero que no ser�a aplicable en este caso es hacer algo as� en una funci�n:

var
  f: Miform;
begin
  f:=MiForm.Create;
  f.show;
  f.free;
end;

Ya que el show se ejecuta y antes de que se cierre el form ya se libera, lo que pueda dar problemas de este tipo.

Usa el debugger y comprueba que el form "Self" siempre apunta a la misma direcci�n, para ello antes del f.showmodal apunta en un papel el valor de "f", y en el evento que haces el close, pon una linea de c�digo que compruebe el valor de self. Ambos tienen que coincidir.

Best regards, JoshyFun

Reply by email

Giuseppe Luigi Punzi
to JoshyFun

El jue, 25-06-2009 a las 14:21 +0200, JoshyFun escribi�:

Show quoted text 42 lines
Hello Giuseppe, Thursday, June 25, 2009, 8:20:56 AM, you wrote: GLPR> Hola joshy. GLPR> No, despu�s del applyupdate hago: GLPR> Frmclientes.close GLPR> Esa l�nea es la que lleva al customform.inc Los EXC_BAD_ACCESS son dif�ciles de corregir, suelen venir provocados por una corrupci�n de la memoria, pero puede venir de muy atr�s en el c�digo. Lo m�s probable es que hayas (digo tu por que es m�s probable que tu codigo est� mal que el de Lazarus) liberado alg�n recurso con un free por alg�n sitio pero lo hayas "reusado" sin querer. Para ello cambia todos los free de tu c�digo por "FreeAndNIL" si no lo has hecho ya. Otra posibilidad es que algo en los objetos que usas con la base de datos hagan algo mal debido a un bug en el c�digo, as� que la �nica soluci�n que veo a tu problema es que reduzcas tu c�digo a la m�nima expresi�n para que lanze el error. Por la linea del error en customform.inc, evento close, el problema es que el form que est�s manejando tiene la memoria corrompida, esto es apunta a una direcci�n que ha sido ya liberada por el motivo que sea. Un problema t�pico de esto, pero que no ser�a aplicable en este caso es hacer algo as� en una funci�n: var f: Miform; begin f:=MiForm.Create; f.show; f.free; end; Ya que el show se ejecuta y antes de que se cierre el form ya se libera, lo que pueda dar problemas de este tipo. Usa el debugger y comprueba que el form "Self" siempre apunta a la misma direcci�n, para ello antes del f.showmodal apunta en un papel el valor de "f", y en el evento que haces el close, pon una linea de c�digo que compruebe el valor de self. Ambos tienen que coincidir.

Hola de nuevo Joshy, pues yo dir�a que no estoy nada raro.

Abriendo el formulario:
procedure TFrmMain.btnClientesClick(Sender: TObject);
var
   form: TFrmClientes;
begin
   form := TFrmClientes.Create(Application);
   form.ShowModal;
   FreeAndNil(form);
end;
Cerrando el formulario Clientes
procedure TfrmClientes.BtnAnadir1Click(Sender: TObject);
begin
  dmDatos.queryClientes.ApplyUpdates();
  frmClientes.Close;
end;

He subido el proyecto a: http://www.lordzealon.com/subidas/incigest.zip por si alguien quiere echarle una ojeada.

Realmente es una chorrada de dos forms y un datamodule, simplemente estoy haciendo un peque�o programilla para ir acord�ndome de Delphi. O sea, que ignorar el c�digo, a excepci�n del problema, porque puede que algo lo halla puesto ah� para probar, pero no sirva para nada :P

Por cierto, que en mi mac, el datasource me detectaba el datamodule y pod�a seleccionar el query, pero en la m�quina Linux de la oficina no, aunque supongo que eso ser� por las distintas versiones de Lazarus, ya que en Linux 64 bits (ni con OpenSuse, ni con Fedora), puedo descargar del SVN porque me d� un error)
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090625/22357f53/attachment.html>

Reply by email

JoshyFun
to Giuseppe Luigi Punzi

Hello Giuseppe,

Thursday, June 25, 2009, 3:05:02 PM, you wrote:

GLP> Hola de nuevo Joshy, pues yo dir�a que no estoy nada raro.

Pues yo dir�a que si :)

GLP> Abriendo el formulario:
GLP> procedure TFrmMain.btnClientesClick(Sender: TObject);
GLP> var
GLP>    form: TFrmClientes;
GLP> begin
GLP>    form := TFrmClientes.Create(Application);
        ^^^^
GLP>    form.ShowModal;
GLP>    FreeAndNil(form);
GLP> end;
GLP> Cerrando el formulario Clientes
GLP> procedure TfrmClientes.BtnAnadir1Click(Sender: TObject);
GLP> begin
GLP>   dmDatos.queryClientes.ApplyUpdates();
GLP>   frmClientes.Close;
       ^^^^^^^^^^^
GLP> end;

form frmClientes ;)

Cambia el frmClientes.Close por Self.Close ;)

GLP> Por cierto, que en mi mac, el datasource me detectaba el datamodule y GLP> pod�a seleccionar el query, pero en la m�quina Linux de la oficina no, GLP> aunque supongo que eso ser� por las distintas versiones de Lazarus, ya GLP> que en Linux 64 bits (ni con OpenSuse, ni con Fedora), puedo descargar GLP> del SVN porque me d� un error)

Ahi si que ya no puedo ayudar mucho que digamos...

Best regards, JoshyFun

Reply by email

Giuseppe Luigi Punzi
to JoshyFun

El jue, 25-06-2009 a las 17:01 +0200, JoshyFun escribi�:

Show quoted text 7 lines
Hello Giuseppe, Thursday, June 25, 2009, 3:05:02 PM, you wrote: GLP> Hola de nuevo Joshy, pues yo dir�a que no estoy nada raro. Pues yo dir�a que si :)

Pues yo no veo el error :P

Show quoted text 22 lines
GLP> Abriendo el formulario: GLP> procedure TFrmMain.btnClientesClick(Sender: TObject); GLP> var GLP> form: TFrmClientes; GLP> begin GLP> form := TFrmClientes.Create(Application); ^^^^ GLP> form.ShowModal; GLP> FreeAndNil(form); GLP> end; GLP> Cerrando el formulario Clientes GLP> procedure TfrmClientes.BtnAnadir1Click(Sender: TObject); GLP> begin GLP> dmDatos.queryClientes.ApplyUpdates(); GLP> frmClientes.Close; ^^^^^^^^^^^ GLP> end; form frmClientes ;)

form est� declarado como variable del tipo TFrmClientes.

Cambia el frmClientes.Close por Self.Close ;)

Ok, lo probar�, pero igualmente, deber�a funcionar como lo he puesto :P

Show quoted text 9 lines
GLP> Por cierto, que en mi mac, el datasource me detectaba el datamodule y GLP> pod�a seleccionar el query, pero en la m�quina Linux de la oficina no, GLP> aunque supongo que eso ser� por las distintas versiones de Lazarus, ya GLP> que en Linux 64 bits (ni con OpenSuse, ni con Fedora), puedo descargar GLP> del SVN porque me d� un error) Ahi si que ya no puedo ayudar mucho que digamos...

Es cosa de la versi�n de Lazarus y/o freepascal. he actualizado y ahora si me sale lo que dec�a.
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090625/8b966453/attachment.html>

Reply by email

JoshyFun
to Giuseppe Luigi Punzi

Hello Giuseppe,

you wrote
> Pues yo dir�a que si :)

GLP> Pues yo no veo el error :P

Jajajaja, ahora sacamos los guantes y nos peleamos :)

GLP> form est� declarado como variable del tipo TFrmClientes.

El tipo coincide, pero no la instancia a menos que por alg�n sitio hagas:

frmClientes:=Self o algo as�.

A ver si consigo explicarlo. Supongamos que al hacer un create en vez de devolvernos un puntero a una nueva instancia, nos devolviera siempre un n�mero consecutivo 1,2,3,4....

La variable global "frmClientes" inicialmente es igual a nil (cero). Ahora en tu c�digo haces:

var
  form: TfrmClientes;
begin
  form:=TfrmClientes.Create();

Entonces form es igual a "1", ejecutas el showmodal, y dentro del onclose llamas a "frmClientes" que recordemos es igual a cero, no igual a "1" que es el que ha originado la llamada. Para eso existe "Self" para que no tengas que apuntar qui�n origin� la llamada, ese siempre es "Self".

> Cambia el frmClientes.Close por Self.Close ;)

GLP> Ok, lo probar�, pero igualmente, deber�a funcionar como lo he puesto :P

No por lo explicado arriba, a menos que haya algo de por medio que invalide mi exposici�n.

Best regards, JoshyFun

Reply by email

Giuseppe Luigi Punzi
to JoshyFun

Se me tiene que haber olvidado programar :D, las medicinas (que estos d�as ando malo), me tienen el cerebro frito, o no se qu� :P

Veamos....

El jue, 25-06-2009 a las 17:52 +0200, JoshyFun escribi�:

Show quoted text 27 lines
Hello Giuseppe, Thursday, June 25, 2009, 5:15:26 PM, you wrote: >> Pues yo dir�a que si :) GLP> Pues yo no veo el error :P Jajajaja, ahora sacamos los guantes y nos peleamos :) GLP> form est� declarado como variable del tipo TFrmClientes. El tipo coincide, pero no la instancia a menos que por alg�n sitio hagas: frmClientes:=Self o algo as�. A ver si consigo explicarlo. Supongamos que al hacer un create en vez de devolvernos un puntero a una nueva instancia, nos devolviera siempre un n�mero consecutivo 1,2,3,4.... La variable global "frmClientes" inicialmente es igual a nil (cero). Ahora en tu c�digo haces: var form: TfrmClientes; begin form:=TfrmClientes.Create();

Por un lado, �ste c�digo, asigna la variable form a la direcci�n de memoria de la nueva instancia de TFrmClientes, lanza un show modal (no visualizado en la citaci�n pero lo comento yo) y luego libera esa variable/objeto, pero Form, s�lo existe en el �mbito del procedimiento OnClick donde es referenciado, ni siquiera para el resto de la unidad.

Show quoted text 6 lines
Entonces form es igual a "1", ejecutas el showmodal, y dentro del onclose llamas a "frmClientes" que recordemos es igual a cero, no igual a "1" que es el que ha originado la llamada. Para eso existe "Self" para que no tengas que apuntar qui�n origin� la llamada, ese siempre es "Self".

Pero, dentro del formulario, FrmClientes (que es el nombre asociado al form), es propiamente Self. El formulario, se encuentra en otro �mbito, y no deber�a de hecho ni saber de la existencia del valor de la variable "form". Yo le paso su sentencia de cerrado, que deber�a cerrarlo, y el c�digo continuar despu�s del modal, y liberarse con FreeAndNil(form).

Show quoted text 7 lines
>> Cambia el frmClientes.Close por Self.Close ;) GLP> Ok, lo probar�, pero igualmente, deber�a funcionar como lo he puesto :P No por lo explicado arriba, a menos que haya algo de por medio que invalide mi exposici�n.

Pues, a no ser que yo est� equivocado (que no digo que no sea probable), queda invalidado :D
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20090625/1dc76919/attachment.html>

Reply by email

JoshyFun
to Giuseppe Luigi Punzi

Hello Giuseppe,

Thursday, June 25, 2009, 6:23:33 PM, you wrote:

GLP> Se me tiene que haber olvidado programar :D, las medicinas (que estos GLP> d�as ando malo), me tienen el cerebro frito, o no se qu� :P

No hombre, simplemente creo que est�s acostumbrado a que Delphi instancie los forms por ti, y en este programa lo has hecho de manera diferente y de ah� la confusi�n.

Visto que no lleg�bamos a un "acuerdo" me he bajado tu c�digo y comprobado que no hab�a nada que no tuviera en cuenta.

Delphi cuando instancia un form por ti, lo har�a as�:

frmClientes:=TFrmClients.Create(nil);

o bien

Application.CreateForm(TfrmClientes,frmClientes)

En ambos casos instancia la variable NO ASIGNADA ( la may�sculas no son para gritar, es que no tengo subrayado ;) ) frmClientes, pero como lo has hecho tu sobre otra variable diferente, "frmClientes" apunta a donde Dios quiera menos a donde deber�a. Esto es por que la variable de tipo TfrmClientes llamada frmClientes no se asigna al form actual por defecto, como creo deducir que crees por tu explicaci�n, si no que hay que asignarla por c�digo.

Para comprobarlo en el formCreate en la primera linea pon:

frmClientes:=Self;

ver�s que no hay m�s errores. O en el onclick que crea el form, cambia:

form:=TfrmClientes.Create;

por

frmClientes:=TfrmcClientes.Create;

Tiene que funcionar ;)

Best regards, JoshyFun

Reply by email

Paola Bruccoleri
to JoshyFun

Hola Joshy..
he entendido tu razonamiento... (aclaro que tuve que releer todo el hilo)..

ahora... cu�l es la forma que t� aconsejas para crear/mostrar un form? Leyendo el libro "la cara oculta de d4" (si, un
poco viejo pero tiene muchas cosas aplicables), es que usan este procedimiento:

procedure MostrarForm(AClass: TFormClass);
begin
      with AClass.Create(Application)do
      try
         ShowModal;
      finally
         Free;
      end;
end;

est� correcto??
podr�a usarle en vez de Free, FreeAndNil(AClass)?? ser�a esa la sintaxis? de esta manera, s�lo se dejar�a la creaci�n
autom�tica para el formulario ppal y el/los datamodules... chauuuuuuuuuuu

Show quoted text 9 lines
No hombre, simplemente creo que est�s acostumbrado a que Delphi instancie los forms por ti, y en este programa lo has hecho de manera diferente y de ah� la confusi�n. Visto que no lleg�bamos a un "acuerdo" me he bajado tu c�digo y comprobado que no hab�a nada que no tuviera en cuenta. Delphi cuando instancia un form por ti, lo har�a as�: frmClientes:=TFrmClients.Create(nil); o bien Application.CreateForm(TfrmClientes,frmClientes)

=======================
A/P Paola Bruccoleri Arrambide
San Jos� de Mayo - San Jos� - URUGUAY

Blog: http://paolabruccoleri.reducativa.com
Portal Educativo: http://www.reducativa.com.uy
Wiki: http://wiki.reducativa.com
Material sobre las XO:
http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal Cartillas XO Sugar 8.2:
http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO

Reply by email

JoshyFun
to Paola Bruccoleri

Hello Paola,

Friday, June 26, 2009, 12:41:35 AM, you wrote:

PB> Hola Joshy..
PB> he entendido tu razonamiento... (aclaro que tuve que releer todo el hilo)..

Es que no me explico como deber�a... no soy muy bueno transmitiendo por escrito.

PB> ahora... cu�l es la forma que t� aconsejas para crear/mostrar un form?

Lo mismo que se ha hecho siempre...

PB> Leyendo el libro "la cara oculta de d4" (si, un PB> poco viejo pero tiene muchas cosas aplicables), es que usan este procedimiento: PB> procedure MostrarForm(AClass: TFormClass);
PB> begin
PB> with AClass.Create(Application)do
PB> try
PB> ShowModal;
PB> finally
PB> Free;
PB> end;
PB> end;
PB> est� correcto??

Es correcto, pero como t�cnica de programaci�n hay que uir de ella. Est� bien como ejemplo, ya que explica varias cosas, como crear una instancia de "algo" sabiendo s�lo que pertenece o hereda la forma de un TFormClass y como usar sus m�todos y propiedades sin asignarlo a ninguna variable (expl�citamente).

El "with" sabemos que lo que hace es que dentro del bloque do..end todo lo que no tenga sentido se reintenta procesar (en tiempo de compilaci�n) anteponiendo lo que aparece entre el with y el do. Esto que es muy c�modo para por ejemplo rellenar de datos una estructura puede convertirse en una pesadilla de depuraci�n si se usa de forma indiscriminada. Pongamos un ejemplo:

type
  Prueba=record
   a: integer;
   b: integer;
  end;
  Lio=record
   V1: integer;
   a: integer;
  end;
[...]
var
  V1: Prueba;
  V2: Lio;
  a: integer;
begin
  with V1 do begin
   a:=1;
   b:=1;
  end;
  //Ahora compliqu�moslo...
  with V2 do begin
    V1.a:=1;
    with V1 do begin
      a:=1; //Esta que parte de que record es ? o es la variable ?
    end;
  end;
end;

PB> podr�a usarle en vez de Free, FreeAndNil(AClass)?? ser�a esa la sintaxis?

No puedes hacer un FreeAndNIL en este caso, ya que la variable que contiene la instancia del form no existe, la ha creado el compilador a trav�s del "with" y est� fuera del control del programador, de modo que no podemos ponerla a NIL aunque tampoco es necesario, ya que como el programador no tiene acceso a ella, no podr� "mal usarla" por error.

PB> de esta manera, s�lo se dejar�a la creaci�n PB> autom�tica para el formulario ppal y el/los datamodules...

La creaci�n autom�tica s�lo tiene 2 inconvenientes, los cuales pueden ser peque�os o grandes seg�n como sea la aplicaci�n. Si la aplicaci�n tiene muuuuchos forms es f�cil tener problemas de memoria en equipos justos, o de falta de recursos de windows (o de otro SO). Otro problema es que con creaci�n autom�tica no debemos crear m�s de una instancia de cada form autocreado, no al menos sin tomar precauciones sobre que variables vamos a usar y como.

Como veo que usais los forms modales con mucha frecuencia, aviso por si hos habiais dado cuenta, que un form modal no puede mostrar otro form modal. Algo asi:

form1:=Tform1.create;
form1.showmodal;
[...]
form1.Onclick()
var
  form2: TOtroForm;
begin
  form2:=TOtroForm.Create;
  form2.showmodal; //KBOOOOOMMMM!
Best regards, JoshyFun

Reply by email

Paola Bruccoleri
to JoshyFun

Hola de nuevo..

Lo mismo que se ha hecho siempre...

bueno, pero c�mo entonces?? bahh, no es que no
sepa las sentencias, pero viendo el ejemplo de
Giuseppe, que es lo que podr�a haber usado y este otro ejemplo... parece que los 2 tienen
problemas.. entonces .. y ah� ya no se cu�l es la forma m�s �ptima..

Show quoted text 5 lines
Es correcto, pero como t�cnica de programaci�n hay que uir de ella. Est� bien como ejemplo, ya que explica varias cosas, como crear una instancia de "algo" sabiendo s�lo que pertenece o hereda la forma de un TFormClass y como usar sus m�todos y propiedades sin asignarlo a ninguna variable (expl�citamente).

veo que no sos amigo de los with!!.. yo los usaba poco realmente..

Show quoted text 7 lines
La creaci�n autom�tica s�lo tiene 2 inconvenientes, los cuales pueden ser peque�os o grandes seg�n como sea la aplicaci�n. Si la aplicaci�n tiene muuuuchos forms es f�cil tener problemas de memoria en equipos justos, o de falta de recursos de windows (o de otro SO). Otro problema es que con creaci�n autom�tica no debemos crear m�s de una instancia de cada form autocreado, no al menos sin tomar precauciones sobre que variables vamos a usar y como.

justamente estaba tratando de hacer m�s prolija
una aplicaci�n.. y s�lo dejando los forms
necesarios que se creen autom�ticamente..
ya se que las m�q de hoy en d�a son super
potentes.. pero andar creando 20 o 30 forms no me parece buena idea..

Como veo que usais los forms modales con mucha frecuencia, aviso por si hos habiais dado cuenta, que un form modal no puede mostrar otro form modal. Algo asi:

pero en otros lenguajes lo hago siempre, y se puede!! siempre me reault� m�s pr�ctico hacer forms
modales; quiz�s por burreza no me he metido con
los otros.. adem�s, es mejor que el usuario no
abra tantas ventanas al cuete (a veces lo hacen
sin pensar lo que hacen, son un peligro)..
adem�s, vengo de los inicios de la programaci�n en dos!!!!

chauuuuuuuuuuuuu

=======================
A/P Paola Bruccoleri Arrambide
San Jos� de Mayo - San Jos� - URUGUAY

Blog: http://paolabruccoleri.reducativa.com
Portal Educativo: http://www.reducativa.com.uy
Wiki: http://wiki.reducativa.com
Material sobre las XO:
http://www.reducativa.com/wiki/index.php?title=Proyecto_OLPC_-_Plan_Ceibal Cartillas XO Sugar 8.2:
http://www.reducativa.com/wiki/index.php?title=Cartillas_sobre_uso_de_la_XO

Reply by email