![]() |
![]() |
| 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:
La gracia de cargar los paquetes de forma dinámica con LoadPackages, es que el ejecutable en el momento de compilarse y de ejecutarse no debe tener ninguna referencia a lo que hay en ese package (imagina plugIns que puedes estar o no). Si en este caso añadimos al USES una unit del TForm2, cuando Delphi compile el proyecto pedirá esa unit y la incluirá en el EXE o si estubiera con packages se asegurará de "linkar ese package de foma estática" para que ese package exista al ejecutar (y eso es justo lo que no queremos -que lo linke de forma estática-). Cita:
Teniendo el nombre de una clase no puedes "castear por ella", pero con RTTI puedes acceder a la Clase, acceder a sus métodos, ejecutarlos, acceder a las propiedades, modificarlas,... En principio teniendo el string 'TForm2' podemos hacer casi todo, pero no llegaremos a:
Podemos llegar a hacer lo mismo por RTTI, pero no al menos de esta forma. ![]() AÑADO: Se me ha adelantado Román y lo ha explicado perfecto y conciso... ;-)
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 11-02-2011 a las 18:16:12. |
|
#2
|
||||
|
||||
|
Aunque usar RTTI no es, en mi opinión, lo más adecuado. Siempre es preferible tener una interfaz entre la aplicación y los paquetes para que ambos se comuniquen.
// Saludos |
|
#3
|
||||
|
||||
|
Ajaá..
ya voy entendiendo mejor la cuestion esa de "cargar dinámicamente paquetes" aunque en RTTI estoy verde aún.![]() Cita:
, pero si no estoy trabajando con carga dinámica, es posible hacer dicho moldeo(casting) teniendo la clase con GetClass? de ser así me podrias dar un ejemplo si no es mucha molestia?Saludos.. ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 Última edición por rgstuamigo fecha: 11-02-2011 a las 18:28:19. |
|
#4
|
||||
|
||||
|
¡Polimorfismo!
Con GetClass obtienes una referencia de clase. En el caso que nos ocupa, como al menos se sabe que la clase referenciada es un descendiente de TForm, puedes hacer el moldeo con TForm y así llamar al constructor. El polimorfismo es entonces, lo que permite que la instancia construida sea de la clase derivada y no de TForm. Así pues, no puedes hacer el moldeo, pero sí construir los objetos de la clase adecuada. // Saludos |
|
#5
|
||||
|
||||
|
Disculpame pero estoy un poco perdido
, " estoy más perdido que Evo en Nueva York"![]() .Hasta aquí> Todo bien pero... Cita:
![]() Yo estaba pensando que talves podría haber la posibilidad de que tal casting sea más abstracto., pero talves sea puras ideas mías,no me hagan caso ,en fin supongo que talves delphi llega hasta por ahí nomas...![]() Saludos y la verdad que me parece un tema muy interesante... ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 |
|
#6
|
||||
|
||||
|
¿Más abstracto? Bueno, puedes usar TComponent -como, de hecho, lo hace adonias. Más no puedes porque el constructor de TObject no es virtual.
Pero, lo que debes preguntarte es, ¿qué ganas con eso? Si tienes una aplicación que requiere crear formularios que no conoce de antemano, el poder hacerlo a partir de TForm, o incluso a partir de algún TBaseForm que sea más específico a tu aplicación, es algo sumamente poderoso. El "preconocimiento" que mencionas sólo se refiere a que se trata de un formulario, pero no requiere saber qué formulario en específico es. Es la potencia del polimorfismo. Y esto es así en cualquier lenguaje OOP. De hecho, no todos los lenguajes las clases tienen un ancestro común como el TObject de Delphi. // Saludos |
|
#7
|
||||
|
||||
|
Bueno básicamente a lo que yo me refería es que si delphi permite hacer ésto:
Osea estoy instanciando un objeto atraves de su clase(algo muy pero muy bueno por cierto ) entonces quizas debería poder hacer algo similar para hacer casting hacia la misma clase(AClass)algo como o algo por el estilo, pero como dije es solo un pensamiento y la verdad me falta mucho por aprender... ![]() Saludos... ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 |
|
#8
|
||||
|
||||
|
Ok. Vamos a suponer que puedes. Entonces, ya tendrías, con
una referencia de TForm2. ¿Cuál sería tu siguiente línea de código? ¿Algo asi?
Pero, para que el compilador sepa quién es labelForm2, necesita la definición de TForm2, que es lo que no tienes. La única manera sería usar RTTI. Pero, como dije, eso no siempre es del todo una buena idea. Se supone que en OOP, con una referencia a un objeto debes poder hacer sólo lo que la clase de ese objeto marque. Claro que el IDE de delphi no podría existir sin RTTI, pero un IDE es un tipo muy especial de aplicación, es algo así como una meta-aplicación ![]() // Saludos |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Como cargar componentes activeX y librerias en el ejecutable | tom_rkx | C++ Builder | 3 | 09-04-2008 22:38:57 |
| Librerias | Bonachon | Conexión con bases de datos | 2 | 18-01-2007 01:54:46 |
| librerias | javikanin | Varios | 0 | 09-11-2004 22:11:20 |
| librerias | kwan | Conexión con bases de datos | 7 | 16-09-2003 23:53:21 |
| Librerias | esquerda21 | Gráficos | 6 | 08-08-2003 09:47:08 |
|