Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Tu lo haces ver tan facil neftalí!!!


Funciono perfecto...

Muchisimas gracias Master!

Última edición por adonias fecha: 10-02-2011 a las 13:46:46.
Responder Con Cita
  #2  
Antiguo 10-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Bueno ..nada más agregar otra alternativa..(aunque no la he probado)... es decir que para poder obtener el label se podría hacer un casting del formulario directamente a clase del formulario en cuestion;ésto en la siguiente linea:
Código Delphi [-]
...
 with TComponentClass(AClass).Create(Application)
        as TCustomForm do //<-- aquí en ves de hacer casting hacia TCustomForm deberiamos hacerlo directamente hacia la 
               //Clase descendiente que nos interesa, es decir hacia nuestro formulario  
      begin
        ShowModal;
        labelForm2.Caption := 'hola';   <---- No llego al form2
        Free;
      end;
...
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 10-02-2011 a las 15:40:41.
Responder Con Cita
  #3  
Antiguo 10-02-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por rgstuamigo Ver Mensaje
... es decir que para poder obtener el label se podría hacer un casting del formulario directamente a clase del formulario en cuestion
El problema es que si pusieras ahí la clase del formulario en cuestión (TForm2, por ejemplo, en lugar de TCustomForm) eso te obligaría (el compilador en realidad) a añadir la unit donde se encuentra definido TForm2, al USES.
__________________
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.
Responder Con Cita
  #4  
Antiguo 11-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Question

A caray.. entonces no se permite poner ningun Uses en la unidad en cuestion?
Bueno... no soy bueno para trabajar con Paquetes y el manejo RTTI en Delphi pero mi pregunta es entonces:
Neftalí, se puede hacer un casting en delphi hacia una clase específica teniendo el nombre de clase específica en una variable?
Por que si se lograse hace eso, se podría utilizarlo en éste caso ¿verdad? o no es posible hacer eso?
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #5  
Antiguo 11-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por rgstuamigo Ver Mensaje
Neftalí, se puede hacer un casting en delphi hacia una clase específica teniendo el nombre de clase específica en una variable?
Lo que puedes es obtener la clase a partir de su nombre con GetClass, tal como lo hace adonias. Pero el moldeo (casting) ¿qué sentido tendría? Si moldeas es porque vas a usar un método o propiedad específica de dicha clase, pero entonces tendrías que tener la definición de la clase, o sea, en un uses, con lo cual ya no estarías cargando dinámicamente el paquete.

// Saludos
Responder Con Cita
  #6  
Antiguo 11-02-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por rgstuamigo Ver Mensaje
A caray.. entonces no se permite poner ningun Uses en la unidad en cuestion?
Justo en este caso es en el que no se puede hacer.
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:
Empezado por rgstuamigo Ver Mensaje
Bueno... no soy bueno para trabajar con Paquetes y el manejo RTTI en Delphi pero mi pregunta es entonces:
Neftalí, se puede hacer un casting en delphi hacia una clase específica teniendo el nombre de clase específica en una variable?
Por que si se lograse hace eso, se podría utilizarlo en éste caso ¿verdad? o no es posible hacer eso?
Justo para solventar eso es para lo que utilizamos la RTTI.
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:
Código Delphi [-]
Form2 := TForm2.Create();
Form2.Label.Caption := 'hola';

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.
Responder Con Cita
  #7  
Antiguo 11-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #8  
Antiguo 11-02-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Ajaá.. ya voy entendiendo mejor la cuestion esa de "cargar dinámicamente paquetes" aunque en RTTI estoy verde aún.

Cita:
Empezado por roman Ver Mensaje
Lo que puedes es obtener la clase a partir de su nombre con GetClass, tal como lo hace adonias. Pero el moldeo (casting) ¿qué sentido tendría?
Ok.. ya no tiene sentido dicho moldeo en el caso de cargar dinamicamente, 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.
Responder Con Cita
  #9  
Antiguo 11-02-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
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


La franja horaria es GMT +2. Ahora son las 00:40:16.


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