![]() |
![]() |
| 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
|
||||
|
||||
|
Sí. Un buen ejemplo de lo que buscas lo tiene la propia VCL en la unidad Menus.pas:
(encontrado con Find in Files en Delphi 7) Observa cómo la unidad ActnPopup.pas hace uso del objeto global:
(encontrado con Find in Files en Delphi 7) Espero te sirva, no dejes de comentarnos. Al González ![]() Última edición por Al González fecha: 30-12-2008 a las 03:30:25. |
|
#2
|
|||
|
|||
|
Perdona mi ignorancia pero, ¿cómo puedo adaptarlo a mi programa?
Supongamos que tengo un formulario y dos clases: Form1, cClase2, cClase3. Form1:
Unit2:
Unit3:
Lo que yo quiero es crear el objeto de la clase cClase3 nada más inicializarse la aplicación para que luego cuando pulse al botón el objeto ya esté creado (como he dicho al principio prescindiendo de un módulo de datos). |
|
#3
|
||||
|
||||
|
Cita:
![]() |
|
#4
|
|||
|
|||
|
Lo tengo y funciona, muchas gracias.
Form1:
Unit2:
Unit3:
Última edición por noob fecha: 15-02-2009 a las 23:21:05. |
|
#5
|
||||
|
||||
|
De nada Noob, gracias a ti por hacer buenas preguntas. Así es como los foros de Club Delphi se han convertido en un deslumbrante acervo de información técnica.
Por cierto, te recomiendo usar Free en lugar de Destroy, por las razones que se explican en varios hilos que hablan de ello. Un saludo. Al. |
|
#6
|
|||
|
|||
|
A veces pienso que mis preguntas son un tanto rebuscadas.
Edito y tomo nota. Última edición por noob fecha: 15-02-2009 a las 23:20:49. |
|
#7
|
||||
|
||||
|
Formalmente lo que buscas es un Singleton. Y la forma en llevarlo a cabo es redefiniendo el método de clase NewInstance y el método FreeInstance.
Luego, debes tener una variable que se puede o no, mantener "oculta" que sea del tipo de la clase definida. ¿Para qué? Para que la implementación de NewInstance pueda chequear si existe una instancia de dicha clase, si existe se devuelve dicha instancia, en otro caso se crea. FreeInstance liberará la instancia. Más o menos la idea es algo como esto:
Ahora si deseas puedes hacer que se cree y se libere dicha instancia en sus secciones Initialization y Finalization. Luego puedes tener cuantas variables donde necesites, cuando hagas algo como:
Variable apuntará a "Instancia". Luego si haces,
Liberas al objeto global, es decir a "Instancia". Se puede modificar un poco el código para no liberar de una, y llevar un contador de las veces que se referencie: NewInstance incrementa el contador, mientras que FreeInstance lo decrementa. Nomás te cuento esto como alternativa. Hay muchas maneras de implementar un singleton. La forma que comentó Al es una de ellas. Pero funcionará siempre y cuando usemos la variable que se declara en Interface. Si uno tiene otra variable de la misma clase, puede correr el riesgo de crearla y liberarla, por tanto habrá dos instancias y se rompe el esquema de la variable global (y única). Ojo, que con el esquema que menciona Al, no hay que liberarla nunca sino dejar que el sistema al finalizar solito se encargue de ello. Saludos, |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Calentamiento global | Crandel | La Taberna | 0 | 20-01-2008 16:13:14 |
| Hook global | pepelaalfa | API de Windows | 2 | 08-12-2005 18:24:27 |
| Variable global | jluisx | OOP | 3 | 27-10-2005 22:31:22 |
| variable global existe en php ? | sarga | PHP | 1 | 27-06-2004 17:47:07 |
| Procedimiento global | Carlos Arevalo | Varios | 2 | 17-11-2003 18:55:00 |
|