Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
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;
mi idea es cojer el valor de la variable etiqueta desde el TForm2

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.
Responder Con Cita
  #2  
Antiguo 17-10-2007
Avatar de walito
walito walito is offline
Miembro
 
Registrado: jun 2005
Posts: 121
Poder: 19
walito Va por buen camino
No intentaste pasandole la variable por referencia cuando creas el Form ?
Capas que hablo giladas, nunca hice nada con bpl

Saludos
Responder Con Cita
  #3  
Antiguo 17-10-2007
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.278
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
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...
Archivos Adjuntos
Tipo de Archivo: zip Prueba paquetes Neftali.zip (9,1 KB, 69 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.
Responder Con Cita
  #4  
Antiguo 17-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
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..
Responder Con Cita
  #5  
Antiguo 17-10-2007
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.278
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
Bueno, el sistema es el mismo que ves en el ejemplo.

Código Delphi [-]
  TAsignarProp = procedure(AEt:String) of object;

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.
Responder Con Cita
  #6  
Antiguo 17-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 18-10-2007
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.278
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 xerkan Ver Mensaje
Ya e visto que con eso se le puede pasar un valor al otro formulario, mi duda es que si le paso un DataModule
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.
Responder Con Cita
  #8  
Antiguo 18-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 18-10-2007
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.278
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
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.
Responder Con Cita
  #10  
Antiguo 18-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
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
Responder Con Cita
  #11  
Antiguo 18-10-2007
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.278
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
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.
Código Delphi [-]
    PackageModule:=LoadPackage('Package1.bpl');
    if PackageModule<>0 then ...

(2) Esto es o que no hace bien
Código Delphi [-]
  AClass:=GetClass('TForm2');
  if AClass<>nil then ...
__________________
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
  #12  
Antiguo 19-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 19-10-2007
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.278
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
¿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.
Responder Con Cita
  #14  
Antiguo 19-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
¿Puedes postear el ejemplo?
Si el código es casi imposible qué puedes ser lo que está mal...
Claro aqui tienes el programa de prueba que estoy realizando para comprender mejor el sistema de paquetes, el programa para acceder a las tablas estoy usando las IBOobjects

http://www.asinval.com/DMPaquetes.zip
Responder Con Cita
  #15  
Antiguo 22-10-2007
xerkan xerkan is offline
Miembro
 
Registrado: jun 2003
Posts: 89
Poder: 21
xerkan Va por buen camino
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);
Otra cosa que me gustaria saber es si al crear el datamodule al iniciarse podria pasarle algun tipo de parametros para conectarse a la base de datos ya que por ahora se los estoy pasando desde el formulario del paquete que creo desde la aplicacion principal
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
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


La franja horaria es GMT +2. Ahora son las 22:06:50.


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