Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-09-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Hola a todos!!

¡¡Tema muy interesante!!

Quizás el problema que nos encontramos cuando empezamos a ver el potencial de las BPLs es imaginar que esto funciona como los plugins que vemos en navegadores o en aplicaciones webs, por ejemplo un plugin de prestashop, donde lo instalas y de golpe añade un montón de funcionalidades nuevas a cualquier parte de la aplicación web y claro no es tan fácil ...

Aquí dejo un enlace a un ejemplo de "PLUGIN" externo, que inserta un menú al formulario principal de la aplicación. Si se quieren usar varios "plugins" habría que aplicar un método de combinación de los menús de los distintos plugins para crear un único menú principal.

Aunque con las BPL se puede conseguir cosas interesantes, me he encontrado con limitaciones importantes que después de darle muchas vueltas, aun intento ver como solucionar.

Uno de estos temas pendientes, por si alguien puede dar una solución es como utilizar las variables "globales" guardadas en las BPLs. En el ejemplo que he subido, la variable "dato" de la unidad plugins, es una de estas variables globales, la comparte la aplicación, y el plugin externo, pero en realidad en memoria son dos variables totalmente distintas, una para la aplicación y otra para el plugin, por que cuando el form del plugin modifica o guarda ese dato, la aplicación lo que lee es otra cosa totalmente distinta. A esto creo que es lo que se refiere oscarac:

Cita:
Empezado por oscarac Ver Mensaje
buenos dias
estoy creando una aplicación nueva y quiero utilizar esa librería para llamar a ese formulario
otra pregunta que me surje es... dentro de ese bpl he incluido algunos otros formularios que son "de uso comun", como por ejemplo un form donde me muetra un gauge al momento de imprimir o importar informacion, esos formularios "de uso comun" como los puedo utilizar?

si creo mas bpl (para generar visualmente otros CRUD o mantenimientos) podria incluir una bpl dentro de otra? para la utilizacion de estos formularios de uso comun?
Y esto afecta, digamos por ejemplo a que esa variable es por ejemplo un plugin con los tipos de IVA que va a usar nuestra aplicación, y a su vez lo van a usar otros plugins (ventas, clientes, articulos)
Archivos Adjuntos
Tipo de Archivo: zip EjemploPlugin.zip (16,9 KB, 19 visitas)
Responder Con Cita
  #2  
Antiguo 12-09-2019
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: 19.449
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 bucanero Ver Mensaje
Uno de estos temas pendientes, por si alguien puede dar una solución es como utilizar las variables "globales" guardadas en las BPLs. En el ejemplo que he subido, la variable "dato" de la unidad plugins, es una de estas variables globales, la comparte la aplicación, y el plugin externo, pero en realidad en memoria son dos variables totalmente distintas, una para la aplicación y otra para el plugin, por que cuando el form del plugin modifica o guarda ese dato, la aplicación lo que lee es otra cosa totalmente distinta. A esto creo que es lo que se refiere oscarac:

Y esto afecta, digamos por ejemplo a que esa variable es por ejemplo un plugin con los tipos de IVA que va a usar nuestra aplicación, y a su vez lo van a usar otros plugins (ventas, clientes, articulos)
Lo primero decir que si estás utilizando plugins (con carga dinámica de packages) utilizar variables globales en el plugin (si luego debes accederlas desde fuera) me parece un error de concepto.

Tal y como tienes planteado el ejemplo, tienes definida la variable Dato en el "plugin base" (plugins.pas). Esto hace que la compilación te funcione correctamente, pero es lógico que al cargar el plugin en ejecución y crear el formulario esa variable quede vacía. Estás accedeiendo realmente a otra posición de memoria.

Creo que es mucho más fácil que eso; Ya que tienes montada toda la estructura para cargar los plugins, crear los formularios y mantenerlos. Pues utilizala para guardar la información que necesites. Desde el programa principal tienes una lista que almacenas plugins Creados/Cargados (ListBPL). Y además ya tienes creada una estructura que almacena datos (TPluginInfo) para cada pluging. Utilizala para almacenar lo que necesites y no tendrás problemas en acceder a esa información.




Te adjunto el ejemplo con una líneas modificadas para explicar lo que quiero decir.
Archivos Adjuntos
Tipo de Archivo: zip EjemploPlugin_modif.zip (17,0 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.
Responder Con Cita
  #3  
Antiguo 13-09-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Post

Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Lo primero decir que si estás utilizando plugins (con carga dinámica de packages) utilizar variables globales en el plugin (si luego debes accederlas desde fuera) me parece un error de concepto.
¡¡¡Gracias Neftali por responder!!!

He estado haciendo pruebas y el tema que veo es que los Packages que se cargan de forma automática (estaticos) en el proyecto van a un bloque de memoria y los que se cargan de forma dinámica van a otro bloque de memoria distinta, entonces si un mismo package, en mi caso la unidad plugins.pas, se utiliza de ambas formas tanto en paquetes estáticos como dinámicos, en realidad hay dos instancia totalmente distintas de estos datos, y cuando intentan interactuar entre ellos no se ven.

En las distintas pruebas que he estado haciendo dentro de los paquetes cargados de la misma manera, sean dinámicamente o estáticamente y siempre que no se mezclen esos paquetes, entonces parece que las variables "globales" si que se pueden compartirse sin problemas.

El tema de utilizar estas variables globales es por ejemplo, el caso mas básico, un paquete con las conexiones de acceso a la base de datos, que lo va a utilizar el resto de paquetes:

Código Delphi [-]
PackageConnection [---
   Unit DMConnections;
   interface
   type
     TDMConnection = class(TDataModule)
...
     end;

  var
    DMConnection :TDMConnection; /// Instancia a la conexión de la BBDD
  ...
   end.
---]

PackageClientes [---
   Unit DMClientes;
   interface
   type
     TDMClientes = class(TDataModule)
  ...
     end;

   implementation       

   uses DMConnections; /// acceso a la instancia a la conexión a la BBDD
   ...
   end.
---]

Seguiré haciendo mas pruebas para verificar que no hace cosas extrañas
Gracias a todos por la ayuda!!
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
Creacion de Indices en ejecucion javicho_villa Impresión 1 29-09-2005 06:27:21
Problemas con creacion de obj en ejecucion mbcito OOP 4 21-01-2005 18:18:12
Creacion de formulario en ejecucion Remp OOP 5 22-04-2004 19:14:15
Creación de tabla en tiempo de ejecución sledgehammer Conexión con bases de datos 3 16-09-2003 15:08:01
Creacion de componente en tiempo de ejecución cone220 OOP 1 16-09-2003 03:47:16


La franja horaria es GMT +2. Ahora son las 22:39:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi