Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   con o sin cafree??? (https://www.clubdelphi.com/foros/showthread.php?t=19806)

CarmaZone 28-03-2005 13:46:03

con o sin cafree???
 
hola, al cerrar mi aplicacion (mi formulario madre) he puesto este codigo

Cita:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg(' ¿ Quieres cerrar la ventana ?', mtCustom,[mbYes, mbNo], 0)= mrYes then
begin
//Action:=caFree;
end
else
Action:=caNone;
end;
He estado probando y con y sin el cafree la cierra igual, me gustaria saber ke es mas conveniente. Creo ke si no pongo el cafree tal vez se kedara algo consumiendo memoria, y otra cosita relacionada, es mejor ponerlo aki o en el onclosequery pq he leido otros post y no me keda clara la diferencia, ya ke pone ke el onclosequery lo cierra pero hace ke no sea visible y luego se ejecuta el onclose y se destruye liberando memoria. Mas o meno lo entendi asi, pero me gustaria me aclararan para conocer mejor su funcionamiento.

Gracias Y Salu2!!!

Lepe 28-03-2005 17:33:29

Cita:

Empezado por CarmaZone
He estado probando y con y sin el cafree la cierra igual,

Por defecto, el parámetro Action vale cafree, por eso da igual ponerlo o no. Existen casos especiales, por ejemplo una ventana MDIChild, lleva en el parámetro Action, el valor caMinimize, por tanto al cerrar, se minimiza.

Cita:

Empezado por CarmaZone
es mejor ponerlo aki o en el onclosequery pq he leido otros post y no me keda clara la diferencia, ya ke pone ke el onclosequery lo cierra pero hace ke no sea visible y luego se ejecuta el onclose y se destruye liberando memoria. Mas o meno lo entendi asi, pero me gustaria me aclararan para conocer mejor su funcionamiento.

En el onCloseQuery solamente tienes una variable Boolean CanClose, en ese evento no puedes hacer nada más.

Sin embargo en el evento OnClose, puedes especificar en el parámetro Action:
caNone // no hacer nada
caFree // liberara de memoria
caHide // esconder el formulario
caMinimize // minimizar

Así que tienes más libertad.

En tu caso concreto, estas preguntando al usuario que si quiere cerrar o no, conceptualmente, se asemeja más a la variable CanClose del OnCloseQuery.

Código Delphi [-]
 procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose :=  MessageDlg(' ¿ Quieres cerrar la ventana ?', mtCustom,[mbYes, mbNo], 0)= mrYes
end;

En la práctica, si sólo es para preguntar al usuario, da igual que lo hagas de una forma u otra.

Un saludo

roman 28-03-2005 18:03:21

Cita:

Empezado por Lepe
Por defecto, el parámetro Action vale cafree, por eso da igual ponerlo o no

De hecho no es así.

El valor por defecto para formularios SDI es caHide mientras que para formularios MDI es caMinimize.

En el código que expone CarmaZone no da lo mismo. Cuando omite el caFree la ventana se cierra pero sólo se esconde (acción por defecto) y permanece en memoria. Cuando usa caFree la ventana se cierra y se destruye. Así pues, su sospecha

Cita:

Empezado por CarmaZone
Creo ke si no pongo el cafree tal vez se kedara algo consumiendo memoria

es correcta.

// Saludos

CarmaZone 28-03-2005 21:28:00

Pues muxas gracias, mi sospecha era cierta, ya ke abia leido algo de esto por estos foros. Por lo ke descomentare el caFree :D ya ke lo ke voy a cerrar es el formulario padre. Cuando cierro los formularios hijos pues como habeis comentado le puesto tambien el Action:=caFree para ke se cierre en lugar de minimizarse.

Muchas gracias de nuevo, estoy aprendiendo muchas cosiyas con estos foros, espero no molestar si son cosillas tontas pero estoy haciendo mi proyecto integrado y estOy intentando hacerlo todo correcto y lo mas eficienTe ke pueda y por esa razon expreso mis dudas.

Salu2!!!


La franja horaria es GMT +2. Ahora son las 01:33:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi