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 10-06-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Aplicacion con Plugin

Hola gente,

estoi comenzando un proyecto que involucra el desarrollo de una aplicación que está compuesta por distintos modulo: Adquisiciones, Ventas, Inventario, Facturación, etc.

Investigando por la red me percate que existe para Delphi las librerias BPL. Mi idea es tener una aplicación principal, y dependiendo del perfil del usuario las distintas librerias a las cuales pudiera ingresar.

De esta forma el programa completa estaría compuesto por un programa base,, mas todos los distintos modulo que componen la aplicación... una de las ventajes que le veo a esto es poder actualizar de forma separada cada modulo (archivos de menor tamaño), etc.

El punto es que no se por donde comenzar aprender todo esto... encontre algunos documentos realizados por Neftali, pero me gustaría comnezar con algo mas sencillo... algo bastante mas sencillo, y asñí poder familiarizarme con todo esto.

Una de las principales problemas que tuve con estos documentos, fue que no pude generar a partir de cero, los archivos bpl que necesito.

Ojala me ouedan ayudar, explicando desde el principio como escribir todo el codigo que necesito para esto.

Además, si es que realmente vale la pena desarrollar esta aplicaión de la forma propuesta.

Gracias.
Responder Con Cita
  #2  
Antiguo 11-06-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.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 mjjj Ver Mensaje
El punto es que no se por donde comenzar aprender todo esto... encontre algunos documentos realizados por Neftali, pero me gustaría comnezar con algo mas sencillo... algo bastante mas sencillo, y asñí poder familiarizarme con todo esto.

Una de las principales problemas que tuve con estos documentos, fue que no pude generar a partir de cero, los archivos bpl que necesito.

Ojala me ouedan ayudar, explicando desde el principio como escribir todo el codigo que necesito para esto.

Además, si es que realmente vale la pena desarrollar esta aplicaión de la forma propuesta.
Bueno, si ya has revisado lo que hay en mi web, no te enviaré otra vez a que la mires...
En la web y embarcadero puedes encontrar documentación al respecto y algunos artículos interesantes.

En cuanto al diseño de la aplicación me parece el correcto. Es más, yo comencé con el diseño de packages en una aplicación grande por una motivación similar. Diferentes módulos de la aplicación y la característica de que los diferentes usuarios cargan diferentes módulos.
La aplicación es un ERP (bastante grande) y aproximadamente cuenta con 25/30 módulos. Por lo tanto no era "aceptable" que todos los usuarios cargaran TODOS los módulos.
Hay usuarios que usan 4, los hay que usan 10 y los hay que los usan todos (admins).

Nuestra estructura de packages es algo así; Cuenta con varias partes "conceptualmente":

* EXE (1 fichero): Básicamente en el formulario principal y algo de código inicial, para iniciar la aplicación, cargar el resto de packages,...
* PACKAGES DE LIBRERÍAS (6 BPL): Contienen los packages que son el CORE de la aplicación; Conexiones a Base de Datos, Controles visuales, librerías genéricas, el core de la interficie y el core para la capa de negocio.
* PACKAGES BÁSICOS (2 BPL): Contiene las clases básicas para la capa de negocio. Son clases genéricas y que debe acceder todo el mundo, de ahí que se carguen de forma estática.
* N PACKAGES NEGOCIO (N BPL): Por último están los packages de negocio. Que son el resto de clases/modulos con los que cuenta la aplicación.
* N PACKAGES VCL.

El EXE carga de forma estática (es decir que están linkados estáticamente al EXE) los packages de la VCL, los 6 packages de librerías y los 2 packages básicos. Si estos packages no se encuentran la aplicación genera error.

Al cargar este core, y segun el usuario que se ha accedido, el sistema sabe qué packages debe cargar (de los N de negocio) y estos son los que se cargan de forma dinámica (utilizando LoadPackage), de forma diferente para cada usuario. de esta forma cada usuario tiene "la parte de la aplicación" que va a utilizar.

Más adelante podemos discutir la carga/descarga dinámica (bajo petición).

Para empezar te recomiendo que hagas un EXE y una BPL con clases y formularios. Línkalo de forma estática y de forma dinámica y en ambos casos debes acceder a ellos.
Cuando tienes carga dinámica tendrás que acceder utilizando RTTI, así que tendrás que empezar a familiarizarte con estos temas.

Más adelante podemos hablar de las actualizaciones de packages "por separado" y de que no es tan bonita como a primera vista parece...

Te recomiendo que pruebes y que experimentes. Si tienes dudas plantéalas. A priori la complejidad aumenta al utilizar packages y aparecen algunos problemas que de otra forma no tendrías, pero considero que para aplicaciones grandes son casi imprescidibles.

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
  #3  
Antiguo 11-06-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Cree un proyecto que contiene 2 packages, cada uno con algunos componentes como TLabel, Tbuttom, Tedit, etc... y un ejecutable con un TButton.

El problema es que al compilar y construir, en ninguna parte me genera los archivos BPL, sino que archivos .dpk.

Como hago para crear los archivos BPL, y asi poder seguir con mis pruebas.

Saludos.
Responder Con Cita
  #4  
Antiguo 11-06-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.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
Una DPK es un archivo de package en diseño; Ahí debes añadir tus formularios y lo que necesites dentro del packege. Cuando compilas ese DPK se genera una BPL. Revisa las opciones del DPK para saber cual es el directorio de salida y donde lo está guardando.

Debes tener 1 ProjectGroup (grupo de proyectos) que dentro tenga 1 DPR (que generará el EXE) y 2 DPK que generarán 2 BPL.

__________________
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 11-06-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Gracias, ya pude crear los archivos BPL.

Me comentaste que en tu aplicación tienes algunos packeges que se carga de forma estatica y otras dinamica... esto quiere decir (estatica), que los carga automaticamente al ejecutarse el EXE... y dinamica, a peticion del usuario??

Me podrias guiar con algo de codigo como podría cargas estos packages tanto de forma estatica, como dinamica.

Gracias
Responder Con Cita
  #6  
Antiguo 12-06-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.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
En principio es sencillo; Si tú en algún USES de una unit, haces referencia a elementos de otro package, el compilador linka ese pacakes de forma estática y aunque tu programa se ejecute con packages, si falta alguno de esos, tu programa fallará al iniciar.
Para utilizar un form de otro packages, por ejemplo, basta con añadirlo al uses y hacer esto:

Código Delphi [-]
formUsuario := TFormUsuario.Create(...)
...

La otra opción es no hacer referencia en los USES a nada que esté en los packages, de esa forma el compilador/linker no necesita esas referencias y no crea ese vínculo estático. Esos packages se cargan desde el programa de forma dinámica (LoadPackage o loadLibrary -en el caso de DLL's-) y para utilizar los formularios o clases que contienen se usa RTTI.

En este caso si quisieras mostrar el form de usuario, deberías hacerlo como se muestra aquí, aquí, aquí, aquí o aquí. si buscas en los foros, encontrarás más referencias (busca por GetClass, RTTI,...)
__________________
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 15-06-2010
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Poder: 18
mjjj Va por buen camino
Despues de mucho batallar logre cargar de forma dinamica mis packages.

Pero tengo algunos problemas.

La forma de cargar estos paquetes funciona asi:

Código Delphi [-]
var
  Frame :TForm;
  PackageModule: HModule;
  AClass: TPersistentClass;
begin
Frame := FindComponent ('Form5') as TForm;
if Assigned (Frame) then frame.BringToFront
else
BEGIN

PackageModule := LoadPackage('C:\PROGRAMAS\DOMMO_3\Mas.bpl');
  if PackageModule <> 0 then
  begin
    AClass := GetClass('TForm5');
    if AClass <> nil then
      with TComponentClass(AClass).Create(Application)
        as TForm do
      begin
        parent := panel1;
        Show;
   //     Free;
      end;
 //   UnloadPackage(PackageModule);
  end;
end;

Las lineas Free y UnloadPackage tuve que comentarlas, ya que cambié el showmodal, por un show. La idea de esto es que funcione como si fuera un archivo de Excel (por ejemplo), en donde pudiese cerrar, maximizar o ajustar el tamaño del form dentro del parent, en este caso un TPanel.

Esto funciona bien, pero el problema es que si ejecuto mas de una vez la rutina me sigue cargando nuevos Forms... y no es lo que quiero. Por esto agregue unas lineas al comienzo...

Código Delphi [-]
Frame := FindComponent ('Form5') as TForm;
if Assigned (Frame) then frame.BringToFront
else

esto con el afan de que si encuentra algun componente de tipo TForm (por ejemplo), en vez de crear nuevamente lo traiga al frente.

El punto es que no funcionó, me percate, que cada vez que creo el Form le agrega al nombre original "_1", "_2", "_3", y asi sucecivamente... como puedo solucioanr esto.

Por otro lado, tengo en el progrma principal 2 Tform, uno que es el con el comienza la aplicación, y el segundo un TdataModule.

Ocurre que tengo 2 paquetes, y en cada uno de ellos lo tengo linkeado con la sentencia "uses", al unit del datamodulo.

El punto es que como NO cierro estos paquetes, si tengo uno abierto y quisiera abrir el otro, me arroja un error que no se puede cargar el paquete, porque contiene un unit que está en otro paquete.

Porque ocurre esto... como puedo solucionarlo.

Espero me puedan ayudar.

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
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 11:55:14.


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