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
  #21  
Antiguo 19-07-2010
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.282
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 mjjj Ver Mensaje
Mi aplicación consta del ejecutable (3 forms y 1 DataModule), 3 paquetes de carga dinámica (desarrollados por mi), y librerias de terceros.
Me interesa que las librerias de terceros se cargen de forma estatica, pero que ademas esten en una carpeta dentro de la carpeta donde esta instalado la aplicación. Esto se define en las opciones de proyecto... ¿en search path?
Para que las librerías (en este caso las de terceros) se carguen de forma estática no debes hacer nada especial; Lo mismo que haces cuando utilizas Units o componentes de Delphi. Añadir las units que necesitas al USES y eso hace que esas librerías se comprueben y se "linken" en compilación. Por lo tanto esas librerías se cargarán de forma estática.
justamente al añadirlas a los USES estás consiguiendo eso.


Cita:
Empezado por mjjj Ver Mensaje
El Datamodule contiene los componentes necesarios para conectarme con la BD. En los paquetes se carga dinamica, le agrego el datamodule como "uses datamodule". el problema ocurre al tratatr de cargar un paquete cuando tengo otro abierto, me arroja que en otro paquete ya se esta usuando el datamodule.
Como puedo solucionar esto?
Este es el caso justo al contrario de lo que te he explicado antes.
Para los paquetes que quieres cargar de "forma dinámica" NUNCA debes añadir las Units que contienes al USES; Al añadir una unit al USES, estás haciendo que ese paquete se cargue de forma estática.

Ves la diferencia:

CARGA ESTÁTICA:
Añades la units a los USES; Eso hace que el compilador las necesite en el momento de compilar y las compruebe; Esos USES hacen que esas BPL's se carguen de forma estática. Es lo que hacemos normalmente con todas las units de Delphi (Classes, forms, stdCtrls, Grids, DB,...) y con cualquier otro componente de terceros que uses.

CARGA DINÁMICA: Para un package que quieres cargar de forma dinámica, ninguna de las units que contiene debe estar referenciada en un USES. En cuanto haya un USES que haga referencia a una de sus units, se cargará estáticamente.

Por defecto los packages que se cargan de forma estática, se buscan en primer lugar, en el directorio de la aplicación y luego en los directorios del path. Si copias los BPL's que se cargan de forma estática en el mismo directorio de tu aplicación, no debes hacer nada especial; Es el primer sitio donde se buscan.

No deberías añadir en el USES el Datamodulo; Creo que lo lógico sería pasarlo en ejecución; A través de una función o propiedad, por ejemplo. Si lo añades al USES de cada paquete, saeguramente delphi lo estará añadiendo en cada uno de los packages, de ahí el error en ejecución.


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
  #22  
Antiguo 19-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Gracias Neftali, ya tengo casi resuelto este tema. Ahora se me presento otro asunto.

Al cargar un paquete de forma dinimica utilizo el sieguiente codigo

Código Delphi [-]
BEGIN
PackageModule := LoadPackage('c:\PROGRAMAS\DOMMO_3\aer.bpl');
  if PackageModule <> 0 then
  begin
    AClass := GetClass('TForm3');
    if AClass <> nil then
      with TComponentClass(AClass).Create(self) as Tcustomform do
      begin
        parent := panel1;
        Show;
      end;
  end;
end;

El cual no arroja errores, pero por ejemplo los TEdit que están en el paquete cargado, pareceiera que estuvieran con la propiedad enabled en falso, siendo que esto no es asi. Los componentes Tbutton funciionan bien.

Ahora bien si le comento la linea del parent, me funciona perfecto.

También me he fijado si el TPanel esta enabled en true, y es así.

Porque podrá ser esto?

Gracias
Responder Con Cita
  #23  
Antiguo 19-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Adjunto un ejemplo con lo que ocurre.
Me di cuenta que en vez de crear un Tform, creo un TFrame, y si que funciona bien, pero no quiero un Tframe ya que no tiene la barra del form y así poder moverlo.

Problema:
El TEdit, Tmemo del Form que es creado de ejecución, al precer como que ha perdido propiedades... no lo puedo seleccionar, ni escribir, etc.

Con el resto de componentes funciona bien... Tlistbox, Tcombobox, etc.

Que podrá ser esto??

Gracias
Archivos Adjuntos
Tipo de Archivo: zip problema.zip (6,8 KB, 7 visitas)
Responder Con Cita
  #24  
Antiguo 20-07-2010
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.282
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 mjjj Ver Mensaje
El cual no arroja errores, pero por ejemplo los TEdit que están en el paquete cargado, pareceiera que estuvieran con la propiedad enabled en falso, siendo que esto no es asi. Los componentes Tbutton funciionan bien.

Ahora bien si le comento la linea del parent, me funciona perfecto.

También me he fijado si el TPanel esta enabled en true, y es así.

Porque podrá ser esto?
Es difícil saber qué está pasando sin ver el código.
Unos cuantos mensajes más arriba envié el código del proyecto (Test Packages dinamicosv2.zip), porqué no haces las modificaciones sobre ese y lo subes (el fuente) para que podamos probarlo.
__________________
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
  #25  
Antiguo 20-07-2010
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.282
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 mjjj Ver Mensaje
Adjunto un ejemplo con lo que ocurre.
Como ya te he dicho, mejor que subas el código. El ejecutable sólo no sirve. No incluye packages y además yo no tengo instalado D2010 y no poseo los packages de librerías.
Como ya te he dicho es más sencillo subir los fuentes y que cada uno pueda compilarlo en sus sistema.
__________________
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
  #26  
Antiguo 20-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Gracias Neftali, tienes toda la razón adjunto código de ejemplo problema.

Aqui se me presentan 2 situaciones. En primer lugar los Tedit y Tmemo (que he detectado por el momento), ocurre que no lo puedo seleccionar, probando descubrí que si en el evento onclick del mismo componente escribí setfocus, funciona pero no es como debiese ser. Por otro lado esto ocurre cuando creo un TForm en tiempo de ejecución y que además el parent sea un TPanel. Si comento la linea del parent funciona bine. Por otro lado en vez de crear un Tform, creo un Tframe aquí si que funciona todo bien, pero no es lo que necesito.

Segundo problema, al crear un Tform que está en una libreria llamada "prueba", en este form existe un Tquery, al cual necesito pasarle la propiedad database y transaction antes de poder abrirlo, pero no puedo hacerlo con un uses ya que está en una librería de carga dinamica.

Espero se entida lo que necesito resolver.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip Form.rar.zip (36,9 KB, 7 visitas)
Responder Con Cita
  #27  
Antiguo 20-07-2010
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.282
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
Hola mjjj.
En el proyecto que has pasado falta el package de prueba y lo más importante el formulario de la discordia (Form4).

He creado uno con un par de componentes y te lo subo. Ahí verás cómo se pueden ejecutar métodos vía RTTI, que creo que es lo que puede solucionar tu problema.
Hay un método sin parámetros y otro con parámetros, que supongo que es lo que tú necesitas para pasarle la Transacción, DataBase,...
Archivos Adjuntos
Tipo de Archivo: zip Formv2.rar.zip (20,2 KB, 8 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
  #28  
Antiguo 20-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Hola Neftali, ahora si incluí lo que faltaba.
Principalmente son 2 cosas que quiero resolver.

El porqué los TEdit de los form cargados de forma dinámica, no los puedo seleccioonar, a menos que le comente la linea parent := panel1.

Y la forma de pasarle al TQuery que está en el Tform cargado de dinamico al database y transaction que está en el formulario principal.

Espero me puedas ayudar, gracias
Archivos Adjuntos
Tipo de Archivo: zip Form.rar.zip (42,8 KB, 7 visitas)
Responder Con Cita
  #29  
Antiguo 20-07-2010
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.282
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
Ahora mismo tengo un poco de prisa; Te subo la misma aplicación con los cambios aplicados a la que he subido antes; Ahí puedes ver cómo ejecutar métodos.

Si no te aclaras, dilo y comentaremos, ahora no puedo entretenerme más.

Un saludo.
Archivos Adjuntos
Tipo de Archivo: zip Form.v3.rar.zip (21,5 KB, 12 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
  #30  
Antiguo 21-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Neftali, mi principal problema ocurre en que al cargar los form de forma dinamica algunos componentes como el TEdit, TMemo, etc. no los puedo seleccionar.

el tema se resuelve al sacar la linea del parent := panel1;

Código Delphi [-]
BEGIN
PackageModule := LoadPackage('compras.bpl');
  if PackageModule <> 0 then
  begin
    AClass := GetClass('TForm5');
    if AClass <> nil then
      with TComponentClass(AClass).Create(self) as TForm do
      begin
        parent := panel1;
        Show;
      end;
  end;
end;

pero esto no me sirve, necesito que este dentro del panel.

Porque podrá ocurrir esto?

Saludos
Responder Con Cita
  #31  
Antiguo 21-07-2010
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.282
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
¿Has probado el ejemplo que te he adjuntado?
__________________
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
  #32  
Antiguo 22-07-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
si, probé el programa que me enviaste, pero ocurre lo mismo que te señalo.

Mi principal problema ocurre en que al cargar los form de forma dinamica algunos componentes del form cargado como el TEdit, TMemo, etc. no los puedo seleccionar.

el tema se resuelve al sacar la linea del parent := panel1;

Ojala me puedas ayudar.

Gracias
Responder Con Cita
  #33  
Antiguo 23-07-2010
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.282
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 mjjj Ver Mensaje
si, probé el programa que me enviaste, pero ocurre lo mismo que te señalo.

Mi principal problema ocurre en que al cargar los form de forma dinamica algunos componentes del form cargado como el TEdit, TMemo, etc. no los puedo seleccionar.
el tema se resuelve al sacar la linea del parent := panel1;
Ok, perdona; Es que no te había entendido.

A ver entiendo ue todo esto que hemos hecho es una prueba parea saber cómo funciona el tema de los packages.
El crear un formulario para asignarle como parent otro componente no es normal y supongo que por eso deben estar sucediendo este tipo de cosas raras.

La forma normal de hacer algo así sería crear formularios tipo MDI que son los que están creados para "esta situación" (que un formulario quede dentro de otro sin poder salir); Si se pudiera hacer como lo estamos intentando hacer nosotros no serían necesarios los MDI.

Otra opción, para hacer lo que estamos queriendo hacer es utilizar el método ManualDock de los forms.
Código Delphi [-]
    Show;
    DynForm.ManualDock(panel1, nil, alNone);

El problema es que en ese caso pierdes el título del formulario, pero entonces se comporta de una forma más normal.

No se si esto te sirve; Lo que quiero decir, es que el ejemplo se centra en la carga dinámica, pero no está pensado para crear formularios y asignarles un Parent.

¿Realmente necesitas algo así? Creo que eso es otro problema diferente al del hilo y tal vez deberíamos discutir lo que necesitas exactamente y formas de conseguirlo.
__________________
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
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
FirebirdConfig ahora en Plugin para IBExpert egostar Noticias 15 26-09-2008 22:45:17
Plugin para outlook fjardelphiyahoo OOP 1 18-09-2007 13:14:01
¿Como instalo plugin en IBexpert? NPIdea Firebird e Interbase 1 22-06-2007 13:27:10
Instalar Plugin en eclipse Paoti JAVA 3 08-01-2007 20:47:23
Que es un plugin? chavetaz Varios 2 19-10-2004 14:41:29


La franja horaria es GMT +2. Ahora son las 05:02:02.


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