![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Cita:
Todavía soy muy novato en Delphi (lo mio era Java y VB.NET), y por lo que veo, por norma general los forms son creados en memoria cuando se inicializa la aplicación (no es como el java, que lo normal era form=new MiJFormulario(); form.showModal(); form=null), y por tanto es el propio Delphi quien lo destruye. En otras palabras, yo soy partidario de destruir/liberar ÚNICAMENTE lo que yo he creado. Si lo ha hecho el IDE, o una clase por mi, debe ser el IDE o la citada clase quien libere los recursos que ha pedido. Saludos, Marc |
|
#2
|
||||
|
||||
|
Cita:
Tú sólo tienes que liberar lo que tú has creado. En tu caso: Código:
procedure TFrmVentasClienteExpress.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
// FrmVentasClienteExpress := Nil;
// FrmVentasClienteExpress.Free;
end;
Código:
qry1:= CrearConsulta ('SELECT CUENTA FROM FACTURA_BISTRO WHERE ESTATUS > 0 AND CUENTA_PRINCIPAL = "' + qry1.fieldbyname('CUENTA').AsString + '"');
result := qry2.RecordCount > 0;
//qry1 := Nil;
//qry1.Free;
Código:
FreeAndNil(qry1)
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
|||
|
|||
|
Hola,
creo que aqui iria mejor el .Release. Un saludo. PD: self.release incluso, aunque estes trabajando con solo una instancia de TFrmVentasexpress. PDD: mas o menos lo que dijo casimiro en su primer parrafo ![]() |
|
#4
|
|||
|
|||
|
Efectivamente Casimiro, Los formularios los creo Yo segun este codigo:
If not Assigned(FrmVentasClienteExpress) then FrmVentasClienteExpress := tFrmVentasClienteExpress.Create(Self); Luego lo muestro y posteriormente en el Close desearia liberar la memoria Si lo hago segun este codigo me despliega un mensaje de "access violation": procedure TFrmVentasClienteExpress.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; FrmVentasClienteExpress.Free; FrmVentasClienteExpress := Nil; end; Pero si lo hago de esta manera funciona: procedure TFrmVentasClienteExpress.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; FrmVentasClienteExpress := Nil; FrmVentasClienteExpress.Free; end; No se si de esa manera el Free posterior al nil esta sobrando osea dejar algo asi: procedure TFrmVentasClienteExpress.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; FrmVentasClienteExpress := Nil; end; Tambien estuve utilizando este codigo: If not Assigned(FrmVentasClienteExpress) then FrmVentasClienteExpress := tFrmVentasClienteExpress.Create(Self); Try FrmVentasClienteExpress.ShowModal; finally FrmVentasClienteExpress.Free; FrmVentasClienteExpress := Nil; end; Aca el problema esta en que si ocurre una excepcion el sistema se queda congelado "pegado" y hay que volcar la tarea desde el administrador de tareas de windows. Que piensan..... Gracias por la valiosa ayuda!!! Última edición por rmora fecha: 17-03-2010 a las 17:22:39. |
|
#5
|
||||
|
||||
|
Normalmente yo uso lo siguiente:
Para formularios mdi creados desde el menu o de una barra de herramientas:
Si son formularios Modales:
Espero te sirvan, recuerda que deben estar quitados de la autocreacion del proyecto. Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!! |
|
#6
|
|||
|
|||
|
aFunez, gracias por tus comentarios.
En el caso de los formularios modales en el evento Close, pones algo?, que pasa si hay una excepcion?, el sistema se queda pegado?. En los formularios mdi basta con la linea que me indicas o hay algo mas?. Ahora es necesario que al crear los fomularios utilice "nil" en lugar del "self"? |
|
#7
|
||||
|
||||
|
Depende de si quieres que el componente sea destruido por su contenedor o si quieres controlar tú diréctamente cuándo destruirlo.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi! - BAScript - Multi Language Scriptable Development Environment |
|
#8
|
||||
|
||||
|
Cita:
Los formularios modales si te das cuenta en la programacion del boton que lo crea tambien esta el codigo para liberarlos, el FreeAndNil Lo hace todo, en el caso que preguntas si hay una excepcion o el sistema se queda pegado; recuerda que el formulario modal no te dejara operar nada mas mientras este en frente de la aplicacion, la unica excepcion puede ser propiamente en el formulario modal que tienes en frente. Los MDI, igualmente lo creas y en el onclose lo unico que necesitas es el FreeAndNil, la diferencia es que los mdi los puedes minimizar y trabajar en otro Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!! Última edición por afunez2007 fecha: 17-03-2010 a las 18:25:21. |
|
#9
|
|||
|
|||
|
Ok, entendido.
Muchas gracias a todos los que colaboraron con el tema, con ello amplie aun mas mis conocimientos. Muchas Bendiciones.... |
|
#10
|
||||
|
||||
|
De este modo sólo debes dejar el caFree, lo otro sobra.
Código:
procedure TFrmVentasClienteExpress.FormClose(Sender: TObject;var Action: TCloseAction); begin Action := caFree; // FrmVentasClienteExpress := Nil; // FrmVentasClienteExpress.Free; end; Código:
If not Assigned(FrmVentasClienteExpress) then FrmVentasClienteExpress := tFrmVentasClienteExpress.Create(Self); Try FrmVentasClienteExpress.ShowModal; // <-- en ese form no uses caFree, usa caHide finally FrmVentasClienteExpress.Free; FrmVentasClienteExpress := Nil; end;
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Curiosidad sobre optimización de memoria | REHome | .NET | 1 | 21-12-2009 17:07:31 |
| Optimización! Optimización! | PiornoCKA&G | Varios | 1 | 31-12-2006 20:45:30 |
| Optimización de corte | felixgo | Varios | 1 | 14-10-2004 11:04:33 |
| optimizacion del SQL | seb@ | SQL | 1 | 22-09-2004 19:55:24 |
| Optimizacion | manuelpr | Conexión con bases de datos | 3 | 30-07-2004 17:26:24 |
|