![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
#1
|
|||
|
|||
Paquetes dinamicos
Estoy haciendo pruebas con un programa que trabaja con paquetes dinamicos de delphi (bpl) lo crea todo perfectamente pero quiero que desde el paquete se puedan acceder a los datos publicos del formulario que lo creo pero si lo linko normalmente me da el sisguente warning:
[DCC Warning] Package1.dpk(36): W1033 Unit 'Unit1' implicitly imported into package 'Package1' y cuando ejecuto la aplicaccion me da un access violation al intentar aceder a los datos del formulario padre al paquete lo estoy llamando con el siguiente codigo: Código:
procedure TForm1.Button1Click(Sender: TObject); var PackageModule: HModule; AClass: TPersistentClass; begin Etiqueta:='Hola'; PackageModule:=LoadPackage('Package1.bpl'); if PackageModule<>0 then begin AClass:=GetClass('TForm2'); if AClass<>nil then begin with TcomponentClass(Aclass).Create(Application) as TForm do begin ShowModal; Free; end; UnLoadPackage(PackageModule); end; end; end; el programa con el que estoy haciendo las pruebas es este: http://www.asinval.com/paquetes.zip Última edición por xerkan fecha: 17-10-2007 a las 11:53:32. |
#2
|
||||
|
||||
No intentaste pasandole la variable por referencia cuando creas el Form ?
Capas que hablo giladas, nunca hice nada con bpl ![]() Saludos |
#3
|
||||
|
||||
Puedes acceder a propiedades/metodos published de los formularios utilizando RTTI.
Por ejemplo desde el form principal (ya que desde el package has registrado la clase TForm2), puedes acceder y modificar propiedades. He modificado tu eemplo para que desde el form1 ejecutes con un parámetro una función/método del form2; Así puedes hacerle llegar datos. Hay cosas más complejas para pasar más información, pero ya depende de lo que necesites (form1 y form2 derivar de un form Base, por ejemplo). Revisa las modificaciones que he añadido al ejemplo y si tienes dudas ya dirás...
__________________
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. |
#4
|
|||
|
|||
He visto algo tu ejemplo y empiezo a comprender un poco mas de los modulos (veo que no va a ser ta simple como creia) me podrias decir tambien como acceder desde el modulo (form2) a un datamodule que esta en la aplicacion principal para que pueda usar sus tablas, conexiones, etc..
|
#5
|
||||
|
||||
Bueno, el sistema es el mismo que ves en el ejemplo.
Ahí se pasa por parámetro en el procedimiento un String, pero nada te impide que pases cualquier otra cosa; ADOConnection, DataModule,... Define el tipo para esa llamada y ya está.
__________________
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. |
#6
|
|||
|
|||
Ya e visto que con eso se le puede pasar un valor al otro formulario, mi duda es que si le paso un DataModule me seria posible asignar una tabla de este datamodule a un grid del formulario encapsulado para realizar operaciones en el grid, ya que los DBComponentes se esperan un TDatasource y al no existir en diseño no le puedo dar un valor
|
#7
|
||||
|
||||
Es una definición de un procedure como cualquier otro de delphi; No sólo puedes pasar valores, pùedes pasar también objetos (o apuntadores a ellos); Formularios, Datamódules, componentes,...
__________________
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. |
#8
|
|||
|
|||
He visto que algunos de mis problemas tambien se pueden solucionar con paquetes estaticos (vere un poquillo tambien el tema), ahora tengo un problema algo menor, te queria preguntar si ahi alguna manera para que los requerimientos del paquete se linkaran a el (vcl.bpl, rtl.bpl, ...) ya que me gustaria añadir solo el que cree yo y no aparte un monton de bpl que use el paquete aparte
|
#9
|
||||
|
||||
Puedes utilizar un EXE sin packages en runtime y cargar dinámicamente packages, pero en ese caso no podrás utilizar RTTI. Deberás hacerlas funcionar como si fueran DLL's, pero ese añadido de información en Runtime lo pierdes.
Si quieres utilizar RTTI, debes utilizar 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. |
#10
|
|||
|
|||
Lo que quiero es tener el ejeuctable mas un paquete hecho por mi, si le quito la opcion build with runtime packages no carga el paquete que e creado, lo malo es que solo quiero que esten esos 2 ficheros y no esos 2 mas los bpl que tienen en la clausura require el Package
|
#11
|
||||
|
||||
Si pruebas en ejemplo que he enviado sin runtime packages, y lo ejecutas paso a paso, verás que sí llega a cargar el package (1), pero cuando intenta acceder a la clase es cuando falla (2), porque es justo ahí donde se requiere RTTI.
Es lo que estaba intentando decirte. Puedes cargar los packages, pero sólo podrás utilizarlos como las DLL's estandard. Define funciones externas y úsalas desde el programa; Pero si intentas utilizar RTTI no podrás. (1) Esto lo hace sin problemas.
(2) Esto es o que no hace bien
__________________
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. |
#12
|
|||
|
|||
Bueno ahora estoy intentando hacer un modulo dinamico, con un datamodule y un formulario que acceda al datamodule los dos estan en el modulo a el cual llamo desde una aplicacion externa el problema es que cada vez que intento cojer algun valor del datamodule del modulo desde el formulario del modulo este me da un Acces violation
|
#13
|
||||
|
||||
¿Puedes postear el ejemplo?
Si el código es casi imposible qué puedes ser lo que está mal...
__________________
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. |
#14
|
|||
|
|||
Cita:
http://www.asinval.com/DMPaquetes.zip |
#15
|
|||
|
|||
Bueno mas o menos e dejado el programa que estoy haciendo en plan prueba a mi gusto usando paquetes dinamicos ahora solo tengo una pequeña duda que parece que no afecta a la ejecucion del programa pero me es un poco molesta al editarlo, el caso es que el modulo dinamico tiene un formulario y un datamodule con las tablas que usa el formulario del paquete y si edito alguna cosa de este formulario al intentar compilar me sale un mensaje de error con el mensaje "Module 'frmProvincias' links to module 'dtmDatos' which cannot be found in the current project. Do you wish to remove/redirect the links to another module"
En cambio si abro el datamodule que esta en el paquete este error no se produce y el paquete compila perfectamente, este error solamente me lo da al modificar el paquete el cual contiene en la clausura contains tanto el formulario como el datamodule, este ultimo lo creo en su clausura de inicializacion con el siguiente codigo: Código:
RegisterClass(TdtmDatos); dtmDatos:=TdtmDatos.Create(nil); |
![]() |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Paquetes desaparecidos | Moises22 | Varios | 6 | 04-10-2005 16:58:40 |
Dudas con paquetes... | adlfv | OOP | 1 | 01-09-2005 16:18:10 |
Configurar paquetes | roman | OOP | 5 | 18-06-2004 22:31:15 |
paquetes ¿? | acertij022 | Internet | 0 | 20-08-2003 16:06:31 |
Paquetes en runtime | rezahe | Varios | 4 | 25-05-2003 06:27:26 |
![]() |
|