![]() |
![]() |
| 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
|
||||
|
||||
|
Pues si creo que voy a usar la segunda opción, la verdad es que dejemoslé el control a TApplicaction que para algo esta
![]() Mi idea de no usarla venia por el lado que si no quería mostrar el formulario no quería darle la posibilidad que lo cree sin permiso. Pero por lo que veo sólo lo crea cuando se ejecuta Application.CreateForm(TForm1, Form1); por mas que este en Auto-create en las opciones. Por otro lado me conveció el AddExitProc(DoneApplication);, que entre otras cosas se encarga de liberar la memoria de todos los componentes al terminar la aplicación. Por el resto del comportamiento parece que es igual, hasta donde llegue a ver. cada día se aprende un poco más sobre Delphi, que lindo que es esto. Saludos y hasta el próximo mensaje de la vuelta ![]()
__________________
[Crandel] |
|
#2
|
||||
|
||||
|
Cita:
Haciendo de abogado del diablo, las únicas componentes son las del formulario y éste es quien se encarga de destruirlas llamando su propio DestroyComponents. Esto es, ¿cuándo o en qué aplicaciones hay componentes, que no sean los mismos formularios, cuyo dueño directo sea Application? Y en el caso de formularios... pues tú mismo lo estás destruyendo. Posiblemente la razón sea que el método especificado en AddExitProc se ejecute aún cuando hay una excepción que obliga a la aplicación a cerrarse a la mala. Y colateralmente llama la atención algo, hablando de estándares que ni la propia Borland sigue, según la ayuda de Delphi: Cita:
// Saludos |
|
#3
|
||||
|
||||
|
Tambien es cierto que una instancia de la clase TApplication parece siempre existir por más que no se vea donde se hace.
Invirtiendo la idea, cual sería la ventaja de no usarla? habria realmente aprovechamiento de recursos u otra cosa? Por el tema de memoria RAM consumida, parace ser igual en una prueba que recien hice.
__________________
[Crandel] |
|
#4
|
||||
|
||||
|
Cita:
// Saludos |
|
#5
|
||||
|
||||
|
¡Hola a todos!
Cita:
Aunque, claro está, la destrucción de todos los componentes adueñados por el objeto Application, ocurrirá de todas maneras al destruir este objeto (lo cual se realiza automáticamente en la sección de finalización de la unidad Controls). Cita:
Esto puede hacernos suponer que la sentencia «AddExitProc(DoneApplication);» en TApplication.Run es innecesaria. Inclusive, tal parece que DoneApplication se ejecuta dos veces si previamente hubo una llamada a TApplication.Run; la primera cuando, al terminar el programa, se llama al procedimiento ExitProc, y la segunda cuando posteriormente se ejecuta la sección de finalización de la unidad Forms. En la unidad System.pas se puede apreciar como _Halt0 llama primero al procedimiento ExitProc y posteriormente a FinalizeUnits, el procedimiento que ejecuta las secciones de finalización de cada unidad. El procedimiento _Halt0 es llamado siempre que un programa termina de forma controlada. Por alguna razón Borland busca que el procedimiento DoneApplication sea ejecutado antes que el código de finalización de cualquier unidad, cuando hubo una llamada al método Run de TApplication. Cabe señalar que AddExitProc permite crear fácilmente una cadena de varios procedimientos de salida asignada a la variable ExitProc, pero la correcta ejecución de esa cadena requiere de la complicidad del procedimiento DoExitProc de la unidad SysUtils.pas y de un pequeño ciclo como el encontrado en el procedimiento _Halt0 de System.pas: Se ve extraño, pero después de analizar lo que hace DoExitProc cobra sentido. Cita:
Estas apreciaciones las hago en base al código fuente de las bibliotecas RTL y VCL de Delphi 7. Un abrazo de salida. Al González. ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|