Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Paquetes dinámicos!

Hola

Bueno, la idea que tengo es cargar componentes externos en BPLs y poder acceder a estos desde mi .exe, osea crearlos, modificarlos, acceder a sus propiedades, métodos, etc.

Y como no tenía idea de esto empecé a buscar y llegué a la web de codegear y el ejemplo del señor Vino Rodrigues para empezar con lo básico me iba bien, pero lo peor es que no logro hacerlos funcionar a los ejemplos, es como si no haría nada y me he puesto a debuguear y llegué a esta línea:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  PackageModule: HModule;
  AClass: TPersistentClass;
begin
  PackageModule := LoadPackage('Package1.bpl');
  if PackageModule <> 0 then
  begin
    AClass := GetClass('TForm2');
 
    if AClass <> nil then // <-- Aquí tengo AClass con Nil
      with TComponentClass(AClass).Create(Application)
        as TCustomForm do
      begin
        ShowModal;
        Free;
      end;
 
    UnloadPackage(PackageModule);
  end;
end;

Osea AClass vale Nil y por eso no logra ingresar y ejecutar las demás sentencias y no me muestra la respectiva ventana cargada dinámicamente, ahora la pregunta es: ¿Por qué tiene valor Nil?

No pego más code por que todo lo saqué de aquí
http://www.clubdevelopers.com/index.php?p=54

Espero alguna solución e idea con respecto a lo de los componentes

Saludos!
Responder Con Cita
  #2  
Antiguo 08-04-2009
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.275
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
A parte del fantástico artículo de Vino Rodrígues, también puedes echarle un vistazo al artículo que hay en mi web, "Sistema de PlugIns - I".
Otro enfoque sobre el mismo tema.

Si el package te lo carga bien, pero te falla el GetClass, apuesto (1 cerveza ) a que estás compilando "sin Runtime Packages". Asegúrate de que el check "Build with runtime packages" está marcado.

__________________
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
  #3  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Ya he visto tu sistema de plugins y no es lo que necesito hacer, por cierto igual ahí usas lo mismo que yo estoy aprendiendo, a cargar bpls dinámicamente, ahora, con lo de la apuesta creo que te gano
ya que según he leido (espero haber entendido bien) osea si marcas esa casilla y compilas de esa forma qué pasaría si NO existiría el package1.bpl ? lanzaría un error, es mas, en el ejemplo 1 de ese mismo fantástico artículo explican de hacer check a esa casilla, que por cierto ya no es
vcl50;Package1.bpl. yo uso delphi 2009 y con eso no me funcionó, cambié a solo vcl;Package1.bpl y así si funcionó perfectamente, pero está claro el mismo artículo dice que qué pasaría si no distrubuyo el bpl. la app fallaría, entonces por este mismo motivo es lo que hacen el ejemplo2, osea cargarlos dinámicamete y ya SIN linkear, y es ahí ya donde no me funciona el ejemplo2 de ese zip del artículo.

Espero que me haya explicado bien y tenga las cosas claras hasta aquí, a ver si no estoy totalmente aquivocado que suele ser la mayoría de las veces

muchas gracias y a ver si alguien más me da una idea del problema y prueba a bajar el .zip del artículo original que está en el siguiente link

http://edn.embarcadero.com/article/27178

y el adjunto está al final

Saludos!
Responder Con Cita
  #4  
Antiguo 08-04-2009
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.275
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 BlackDaemon Ver Mensaje
Ya he visto tu sistema de plugins y no es lo que necesito hacer, por cierto igual ahí usas lo mismo que yo estoy aprendiendo, a cargar bpls dinámicamente
Pues justamente por eso te recomendé que leyeras el artículo y que revisaras el proyecto de ejemplo (que por cierto he corregido el link porque no era correcto). Porque ahí se hace lo mismo que tú estás haciendo (GetClass) y sí funciona correctamente.


Cita:
Empezado por BlackDaemon Ver Mensaje
ahora, con lo de la apuesta creo que te gano
Todavía albergo esperanza...

Cita:
Empezado por BlackDaemon Ver Mensaje
ya que según he leido (espero haber entendido bien) osea si marcas esa casilla y compilas de esa forma qué pasaría si NO existiría el package1.bpl ? lanzaría un error, es mas, en el ejemplo 1 de ese mismo fantástico artículo explican de hacer check a esa casilla, que por cierto ya no es
vcl50;Package1.bpl. yo uso delphi 2009 y con eso no me funcionó, cambié a solo vcl;Package1.bpl y así si funcionó perfectamente, pero está claro el mismo artículo dice que qué pasaría si no distrubuyo el bpl. la app fallaría, entonces por este mismo motivo es lo que hacen el ejemplo2, osea cargarlos dinámicamete y ya SIN linkear, y es ahí ya donde no me funciona el ejemplo2 de ese zip del artículo.
Pues creo que eso es lo que no has entendido bien.

PREMISA PARA PODER UTILIZAR RTTI (GetClass): Tanto en el artículo de Vino Rodigues (parte del FINALLY) como en el mío (donde están las RECOMENDACIONES), se deja bien claro que el Check "Build with runtime Packages" debe estar marcado. ¿Porqué? Por explicarlo de una forma sencilla, si compilas sin Runtime packages la información de RTTI del programa principal y de los packages dinámicos no se encuentra en el mismo lugar, por tanto al acceder desde el programa a esa información del package (con GetClass), no la encuentra. La única forma de que esa información esté accesible es compilando el programa con Runtime Packages.

Por otro lado están los packages que se cargan de forma estática, que son los que aparecen en la lista que comentas. El package1 que aparece en esa lista, se carga de forma estática, por eso está ahí. Los packages que tú vas a cargar de forma dinámica (con LoadPackage) no deben estar es esa lista. Por la razón que tú comentas (si no existieran fallaría la aplicación).

(1) Activa el CheckBox en las opciones del proyecto.
(2) Elimina los packages que vayas a cargar con LoadPackage de esa lista
(3) Ejecuta el código y prueba el GetClass.

CONCLUSIONES.

(1) Si tu aplicación se compila/linka sin packages dinámicos (todo en un EXE), puedes usar LoadPackages para cargar packages dinámicos, pero no podrás utilizar la información de RTTI (por ejemplo GetClass) de los packages cargados con LoadPackages desde la aplicación (GetClass de las clases del package siempre devolverá nil).

(2) Si tu aplicación compila con runtime packages, hay packages cargados estáticamente (de los que has hecho un USES -los de la VCL, por ejemplo-) y que estarán en la lista de packages (si no están la aplicación falla) y packages cargados dinámicamente con LoadPackage. Estos últimos no deben estar en la lista de packages (opciones del proyecto) y si no están disponibles, fallará la llamada a LoadPackage, pero no la ejecución de la aplicación. Con este escenario la información RTTI de todos los packages cargados (estáticos y dinámicos) está en el mismo lugar, por lo tanto puedes acceder a ella -para todos los packages- sin problemas (Getclass).

Espero haberme expllicado medianamente bien.

Un saludo.

P.D: Sigo creyendo que ganaré la cerveza.
__________________
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
  #5  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Pues sí que te entendí todo, peeero una cosa que no me queda clara.

¿Por qué los ejemplos que exponen ahí, los del zip no funcionan ?

Osea ahí dice bien claro que debería cargarte el form2 del bpl "dinámicamente" pero no lo hace y es ahí donde probé que da el valor de _nil_ y según he leido

pero he vuelto a compilar el programa activando build runtime packages y SOLO dejé ahí "vcl" y eliminé package1 y funcionó, me mostró el form2, es correcto lo que hice?

O solo debería marcar la casilla y quitar _todo_ de ahí, vale decir que lo probé de esa forma y pues el resultado es lo mismo que si la casilla esté desmarcada jeje

BUeno, si es así, entonces lo correcto es que la casilla esté activada y SOLO esté la palabra vcl ahí y listo ?
si sería eso entonces doy mi "primer" problema por solucionado y muchas gracias neftalí por tantas palabras para resolver algo difícil para mí

Saludos!!

PD por cierto, no a terminado aún este hilo, ya que ahora quiero hacer lo de cargar componentes en un BPL y poder acceder a estos desde un form y crearlos, acceder a sus métodos, etc, a ver si es to es posible

edit: bueno, sobre la cerveza me la ganaste, venga ya, nos vemos en la taberna que pago todo yo, y para el que se quiera unir a la farra igual que vaya

Última edición por BlackDaemon fecha: 08-04-2009 a las 17:48:57. Razón: oiga, ¿y la cerveza?
Responder Con Cita
  #6  
Antiguo 08-04-2009
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.275
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 BlackDaemon Ver Mensaje
¿Por qué los ejemplos que exponen ahí, los del zip no funcionan ? ...pero he vuelto a compilar el programa activando build runtime packages y SOLO dejé ahí &quot;vcl&quot; y eliminé package1 y funcionó, me mostró el form2, es correcto lo que hice?
Pues sí funcionan si los configuras correctamente.
En el primero, como hace el USES del formulario2 en ese caso ya está claro, lo está linkando estáticamente.
En el segundo caso lo hace bien. No hace el USES y lo carga con LoadPackage. En ese caso puedes ver que si marcas o desmarcas la casilla el resultado de GetClass es diferente y pasa lo mismo con el Ejemplo3.
En el ejempo3 de los dos ítems del menú, el primero lo carga estáticamente, puesto que está haciendo el USES y el segundo dinámicamente, pero para que el segundo funcione vuelve a hacer falta que se active el Check de &quot;Build with runtime packages&quot;.

En cuanto a qué packages poner en ese Edit, pues como bien dices, VCL y los que se usen linkados estáticamente. Segun lo que utilices; vcl;rtl;dbrtl;adortl;...

Un saludo.
__________________
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
  #7  
Antiguo 08-04-2009
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
BlackDaemon

Yo utilizo mi aplicacion exactamente como tu lo necesitas, para que esto funciones debes Registrar la Clase al final de cada form:

Código Delphi [-]

initialization
RegisterClass(TForm2);
 
finalization
UnRegisterClass(TForm2);
Responder Con Cita
  #8  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
hola

A ver, estoy más perdido que no se qué, a ver, os explico mi problema, yo por ejemplo quiero meter unos componentes en un BPL y poder crearlos desde mi formprincipal, pudiendo acceder a ellos como si estaríen en mi form, y como son varios necesito hacer como una especie de API para que me digan todos sus métodos, propiedades, etc

Se entiende lo que quiero hacer?

me gustaría que alguien me pueda pasar un ejemplo de como hacer esto con componentes

saludos!
Responder Con Cita
  #9  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Cita:
Empezado por Efren2006 Ver Mensaje
BlackDaemon

Yo utilizo mi aplicacion exactamente como tu lo necesitas, para que esto funciones debes Registrar la Clase al final de cada form:

Código Delphi [-] initialization RegisterClass(TForm2); finalization UnRegisterClass(TForm2);
Hola

No pues si yo lo hago igual, solo que el problema o duda era referente a marcar y "que" dejar en ese campo, y ahora veo que SI o SI necesito dejar la palabra vcl ahí, si no, no funcionará.

Saludos!!
Responder Con Cita
  #10  
Antiguo 08-04-2009
Efren2006 Efren2006 is offline
Miembro
 
Registrado: feb 2006
Posts: 172
Poder: 19
Efren2006 Va por buen camino
Cita:
Empezado por BlackDaemon Ver Mensaje
Hola

No pues si yo lo hago igual, solo que el problema o duda era referente a marcar y "que" dejar en ese campo, y ahora veo que SI o SI necesito dejar la palabra vcl ahí, si no, no funcionará.

Saludos!!
Disculpa,, no habia leido al detalle la expliacion de Neftali, y de tu problema, efectivamente es como el te lo explica, yo tambien uso delphi 2009, pero no he tenido la necesidad de crear componentes solo Formularios,

Ahora le Pregunta es porque no instalas estos componentes en el Id y le das ese trabajo a Delphi ? no lo se,, disculpa mi ignorancia.

Saludos
Responder Con Cita
  #11  
Antiguo 08-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

No pues no tienes de que disculparte, aquí entre ignorantes no entendemos jeje ya que yo igual desconosco muchas cosas

Pues lo que pretendo hacer es repartir la aplicación .exe final y el bpl con los componentes, así si quiere actualizar algo solo tendría que hacerlo en el bpl y el .exe y no TODA la aplicación la cual es grande, muy grande

A ver si alguien se anima a realizar un ejemplo y podrás ver el funcionamiento

Saludos!!
Responder Con Cita
  #12  
Antiguo 08-04-2009
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.275
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 Efren2006 Ver Mensaje
Yo utilizo mi aplicacion exactamente como tu lo necesitas, para que esto funciones debes Registrar la Clase al final de cada form

Bueno, es parte de lo que estábamos comentado.
No sólo basta con hacer eso, sino que si posteriormente vas a acceder a esa clases utilizando RTTI (GetClass) debes compilar com packages en Runtime.
__________________
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
  #13  
Antiguo 09-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Bueno, como bien dice el colega nefatalí utilizar RTTI (run-time type informationn) en estos casos es realmente útil, pero ahora yo quisiera saber si es posible hacer lo que yo quiero, alguien aquí podría decirme si es o no posible?
de ser así me lo podría explicar así como para tontos? jeje
es que así logro entender

Saludos!!
Responder Con Cita
  #14  
Antiguo 09-04-2009
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.275
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 BlackDaemon Ver Mensaje
os explico mi probálema, yo por ejemplo quiero meter unos componentes en un BPL y poder crearlos desde mi formprincipal, pudiendo acceder a ellos como si estaríen en mi form, y como son varios necesito hacer como una especie de API para que me digan todos sus métodos, propiedades, etc

Pues puedes crear componentes en un package sin problemas. En realidad todos los componentes que se distribuyen para delphi suelen venir de esa manera.
Lo que no entiendo es que si quieres utilizar esos componentes en tus formularios, deberás instalarlos en el IDE y usarlos en diseño.

Si sólo quieres crearlos en ejecución, puedes cargar ese package dinámicamente, pero no acabo de enterder muy bien la utilidad de esto último.
__________________
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
  #15  
Antiguo 09-04-2009
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.275
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 BlackDaemon Ver Mensaje
Pues lo que pretendo hacer es repartir la aplicación .exe final y el bpl con los componentes, así si quiere actualizar algo solo tendría que hacerlo en el bpl y el .exe y no TODA la aplicación la cual es grande, muy grande

A ver si alguien se anima a realizar un ejemplo y podrás ver el funcionamiento

Pues sí se puede y además creo que es lo correcto para aplicaciones muy grandes. Lo normal es que en un package coloques una serie de formularios y clases que están relacionados, o procesos. De esa forma tu aplicación resulta más modular.
__________________
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
  #16  
Antiguo 09-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Sí, eso entendí desde un principio, pero resulta que no sé por donde empezar, vamos, que esto de los forms ya entendía, pero qué pasaría en el caso de componentes de 3ros? como por ejemplo los TMS si quier meter en un BPL y poder acceder a ellos desde mi app ?

creo que es lo único que me falta para solucionar mis problemas.
desde ya muchas gracias por por sus respuestas y ayudas.
Saludos!
Responder Con Cita
  #17  
Antiguo 09-04-2009
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.275
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 BlackDaemon Ver Mensaje
Sí, eso entendí desde un principio, pero resulta que no sé por donde empezar, vamos, que esto de los forms ya entendía, pero qué pasaría en el caso de componentes de 3ros? como por ejemplo los TMS si quier meter en un BPL y poder acceder a ellos desde mi app ?
Bueno, no tienes que hacer nada en ese caso. Los TMS y el resto de componentes ya vienen en un Package (BPL). O mejor dicho, normalmente en dos. Uno de diseño y otro de Runtime.

Tal vez no entendí este último punto.
__________________
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
  #18  
Antiguo 10-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

A ver, la idea es esta:

crear un componente o uno que ya exista, entonces meter este y otros a un BPL, osea hacer un BPL de varios componentes, hasta ahí claro, digamos que se llama comps.bpl, ahora yo en mi form principal tengo que crear un componente del comps.bpl, eso lo hago de la forma expuesta en los anteriores post, hasta aquí todo funciona correctamente, pero no puedo acceder a sus métodos propiedades, etc del dicho componente :S

es mas, he seguido esta guía

http://tinyurl.com/d3lafr

Donde ahí exponen lo que quiero hacer, el que tengo algo de tiemop me gustaría que lo prueben, como ven, el mete 2 componentes en un BPL y luego desde otro form los llama, yo no he logrado que me muestre el edit en mi form, no sé por que, pero me da error en estas líneas

Código Delphi [-]
  if Cls <> nil then
  begin
    Obj := TEdit(TComponentClass(Cls).Create(Self));
    Obj.Parent := Self;
    Obj.Left := 100;
    Obj.Top := 100;

A ver, logro pasar el primer If, donde mi cls NO vale nil, entonces según yo, o lo que entiendo poco o nada de OO, ahí Obj es un objeto que hereda TODO lo del componente que está en el BPL, entonces ahí da a suponer que ulego utiliza su propiedad Parent, Left, Top, pero yo cuando hago lo mismo en la línea Obj.Parent el delphi me marca error, no me deja compilar por que dice que esa propiedad no existe, claro, supongo por que no a acargado el componenet aún, ni lo a creado ni nada, pero entonces, ¿cómo debería poder mostrar el componente en el form principal ?

si siguen leyendo el link que puse ahí, la parte de mostrar el método AboutBox SI me funciona, osea puedo lograr mostrar el Dialog ese definido en el BPL, pero mas no las propiedades.

Espero que alguien me sepa ayudar, desde ya muchas gracias

Adiós!

PD: por cierto, qué diferencias hay entre GetClass y FindClass ? creo que a mí con ambas me funciona

Última edición por BlackDaemon fecha: 10-04-2009 a las 18:05:11.
Responder Con Cita
  #19  
Antiguo 14-04-2009
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.275
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
Pues yo he probado y funciona correctamente la creación de componentes.
Los pasos que he seguido.


1º) Coger los PAS de dos componentes derivados de TEdit (AlignEdit -de Román- y EditInsideHelp -mio-). Son los primero que se me han venido a la cabeza.
2º) He creado un nuevo package y los he incluído ambos dentro. No he puesto los DCR de las imágenes para abreviar. El package se llama PExEdit.dpk y está guardado en el mismo directorio y se copila sin problemas.
3º) Creo una nueva aplicación llamada Testpk en ese mismo directorio.

4º) Antes de continuar y puesto que los componentes no lo tienen, he añadido a ambos el registro de la clase, tal y como explica en el documento anterior al que tú mencionas.
Código Delphi [-]
// package unit
initialization
  RegisterClasses([TEditInsideHelp]);
finalization
  UnRegisterClasses([TEditInsideHelp]);

Código Delphi [-]
// package unit
initialization
  RegisterClasses([TAlignEdit]);
finalization
  UnRegisterClasses([TAlignEdit]);

5º) Una vez hecho esto, el package compila perfectamente y el proyecto también. He añadido al proyecto el código para cargar el package en Runtime.

Código Delphi [-]
initialization
  Plugin := LoadPackage('PExEdit.bpl');
finalization
  if Plugin <> 0 then
    UnloadPackage(Plugin)

6º) Sólo queda hacer una cosa. En el proyecto, puesto que se van a usar carga dinámica de packages y acceso por RTTI, hay que marcar la opción "Build With runtime package" en las opciones.

7º) Para hacer algunas pruebas más he añadido una rutina que te permite modificar propiedades vía RTTI a partir de su nombre, con lo que puedes modificar propiedades de los componentes.

Funciona perfectamente.
Te dejo el proyecto completo.

Y los ha creado correctamente...
Archivos Adjuntos
Tipo de Archivo: zip Componentes Packages.zip (7,5 KB, 17 visitas)
__________________
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: 14-04-2009 a las 16:09:14.
Responder Con Cita
  #20  
Antiguo 14-04-2009
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Hola

Sí, yo también a prueba y error lo he logrado jeje, pero aunque de una forma algo diferente pero en si, llegamos a los mismo, pero como tu lo expones aquí es de lo mejor, muchas gracias neftalí, eres dios

por cierto, di tengo 3 componentes en el bpl, y desde mi form principal quiero crear uno, ¿cómo sabría los nombres de los componentes que tengo en el bpl ?
osea, sus nombres, métodos, etc, algo así como hace delphi que te muestra mientras vas escribiendo, si esto lo hace automáticamente retiro la pregunta.
Pero mi idea era crear una especie de api que me permita saber los nombres de los componentes del bpl y sus propiedades, etc

Saludos!
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
Hilos con objetos dinámicos netoDelphi Varios 2 27-11-2006 20:46:05
Dudas con paquetes... adlfv OOP 1 01-09-2005 16:18:10
Paquetes en delphi davezf Varios 4 05-04-2005 20:04:18
paquetes ¿? acertij022 Internet 0 20-08-2003 16:06:31
Paquetes en runtime rezahe Varios 4 25-05-2003 06:27:26


La franja horaria es GMT +2. Ahora son las 08:12:58.


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