Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-09-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
dudas sobre fichas

Si se hace una aplicación, con muchas fichas y todas se crean automaticamente, deduzco que se ocupará mucha memoria y la aplicación será mas perezosa. ¿ cierto ?

Entonces yo, he desactivado la creación automatica de algunas fichas y para abrirla tengo este código:

Código:
  Comunicaciones:=TComunicaciones.Create(Application);
 Comunicaciones.Show;
 //comunicaciones.Free;
si en vez de Show abro en modo moal, puedo ejecutar el Free, sin problema.
1- ¿ pero como hago Free cuando es en modo Show normal ?
2- ¿ Como se libera la aplicación ?
3- ¿ como saber el número de veces que hay abierta una ficha ? ( esto no es muy importante ahora)

Gracias.
__________________
Saludos Cordiales.
------------------

Responder Con Cita
  #2  
Antiguo 15-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Hace poco que leí el artículo Delphi "problem": TForm.Create(?) Nil, Self or Application? de Zarko Gajic, que creo que viene aquí al pelo y tal vez te interese leer a ti también.

Lo primero decirte que estás en lo correcto: si al inicio de la aplicación se crean N formularios, se consumirán Y recursos. Si estos se van creando, por tanto, según vayan necesitándose, y liberándose luego de que su uso no sea necesario, probablemente ahorremos recursos.

Cita:
1- ¿ pero como hago Free cuando es en modo Show normal ?
Puedes hacerlo "cuando quieras", pero, sabe que los formularios cuentan con un evento "OnClose", en el que se pasa por referencia un parámetro "Action", de tipo "TCloseAction", que determina, precisamente, qué ha de hacerse con el formulario una vez este se cierre.

¿Posibles valores para dicho parámetro "Action"? Pues: caNone (para no hacer nada en concreto), caHide (para ocultar el formulario, simplemente), caFree (para liberar el formulario) o caMinimize (para minimizarlo).

Cita:
2- ¿ Como se libera la aplicación ?
Ahí ya me meto yo en camisas de once varas, pero, tal vez baste decir que cuando el formulario principal de la aplicación se cierre... la aplicación comenzará a liberarse. Por aplicación entiendo aquí a la variable "Application", que comenzará a liberar los objetos de que sea dueña, para por último terminar la aplicación. El formulario principal de la aplicación es el primero que se crea.

Cita:
3- ¿ como saber el número de veces que hay abierta una ficha ? ( esto no es muy importante ahora)
Eso depende. Una variable "Form", de tipo "TForm", sólo puede contener una instancia de la clase "TForm". Si tienes más variables con más instancias del mismo formulario... pero, no es lo común, diría yo. También hay que ver qué se entiende por un formulario "abierto". Este puede estar creado, pero, oculto, por ejemplo.

En todo caso si te interesa conocer todos los formularios de la aplicación cuenas con la variable "Screen", que tiene propiedades como "FormCount" y "Forms", que te dan acceso a todos los formularios creados en la aplicación en un momento dado.

Y termino remitiéndote de nuevo al artículo Delphi "problem": TForm.Create(?) Nil, Self or Application? de Zarko Gajic; verás que en lugar de usar "Application" como "dueña" (owner) de un formulario que crees, tal vez te convenga usar el propio "Self", o incluso "nil". Revisa el artículo en todo caso. Aunque en inglés no resulta complicado de seguir.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 15-09-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Confirmo lo que dice dec porque lo he comprobado en mis propias carnes. Hace años me encargaron mejorar un programa. Era completísimo y tenía como 200 ventanas, fichas, paneles y formularios o más. El que había hecho el programa había dejado que se crearan todos estos objetos automáticamente, así que nada más empezar el programa se tiraba media hora (reloj en mano) parado hasta abrir la primera ventana.

Cuando terminé la remodelación (un año más tarde) mi programa tenía tantas o más ventanas y paneles pero sólo los cuatro o cinco más importantes (la principal, un datasource y alguna cosilla más) eran creados al arrancar mientras que el resto se creaban y destruían cuando procedía.

Mi jefe se quedó flipando porque el anterior programador le dijo que no podía cargar más rápido y mi versión cargaba en 30 segundos o poco más (y por culpa de la base de datos, que se las traía).

Así que pregunta, pregunta:

Cita:
2- ¿ Como se libera la aplicación ?
Cuando se cierra la "ventana principal" (mira el código fuente del archivo "dpr" de tu proyecto). Esto lo hace el objeto Application, el cual mantiene una lista con todas las ventanas que se crean, tanto automáticamente como a mano, a través del objeto "Screen" que ha descrito dec. Cuando se destruye la "ventana principal" el objeto Application entiende que se quiere terminar el programa así que coge la lista de ventanas y las va destruyendo una a una.

(nota: Lo cierto es que hace mucho que no hago programas "visuales" en Delphi, así que si estoy equivocado ruego me disculpen).
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 15-09-2007 a las 14:40:56. Razón: Añado una respuesta
Responder Con Cita
  #4  
Antiguo 15-09-2007
Cecilio Cecilio is offline
Miembro
 
Registrado: ago 2007
Posts: 140
Poder: 17
Cecilio Va por buen camino
Cita:
Empezado por dec Ver Mensaje
Hola,

Puedes hacerlo "cuando quieras", pero, sabe que los formularios cuentan con un evento "OnClose", en el que se pasa por referencia un parámetro "Action", de tipo "TCloseAction", que determina, precisamente, qué ha de hacerse con el formulario una vez este se cierre.

¿Posibles valores para dicho parámetro "Action"? Pues: caNone (para no hacer nada en concreto), caHide (para ocultar el formulario, simplemente), caFree (para liberar el formulario) o caMinimize (para minimizarlo).
¿ y como se hace eso ? De todas formas voy a buscar en el foro, por si encuentro algo.
__________________
Saludos Cordiales.
------------------

Responder Con Cita
  #5  
Antiguo 15-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.110
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues muy sencillo. Tienes que usar el evento "OnClose" de los formularios, siempre que lo estimes oportuno. Y en dicho evento verás que se pasa por referencia un parámetro "Action". A dicho parámetro uno de los valores posibles, por ejempo, "caFree", de modo que cuando el formulario se cierre se libere al mismo tiempo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dudas sobre las api de windows Barbaro API de Windows 2 26-12-2005 14:11:32
Dudas sobre TTreeView jodycom Varios 2 18-04-2005 10:03:50
dudas sobre transacciones..... inexperto Conexión con bases de datos 2 18-11-2004 20:24:31
Dudas sobre Locate silviodp Conexión con bases de datos 8 28-04-2004 14:59:26
Dudas sobre IP acertij022 Internet 0 20-05-2003 21:04:29


La franja horaria es GMT +2. Ahora son las 10:39:15.


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
Copyright 1996-2007 Club Delphi