Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Gracias Neftali.

Con esto pude solucionar el ejemplo 2

MainForm carga al BplForm, y el MainForm modifica elementos del BplForm (Labels, Input, etc)

Código Delphi [-]

procedure TFrm.FormCreate(Sender: TObject);
var
  PackageModule: HModule;
  AClass: TPersistentClass;
  componentLabel: TComponent ;
begin
  PackageModule := LoadPackage('Package1.bpl');
  if PackageModule <> 0 then
  begin
    AClass := GetClass('TForm2');

    if AClass <> nil then
      with TComponentClass(AClass).Create(Application)
        as TCustomForm do
      begin
        Show;

        // Buscar el Label
        componentLabel := FindComponent('label1');
        // lo ha encontrado?
        if Assigned(componentLabel) then begin
          TLabel(componentLabel).Caption := 'hola';
          MessageDlg('¿Ves el cambio?  Pulsa para continuar y cerrar...', mtConfirmation, [mbOK], 0);
          TLabel(componentLabel).Caption := 'Adiós';
          MessageDlg('Lo he vuelto a cambia......', mtConfirmation, [mbOK], 0);
          //Free;
        end;
      end;
  end;


end;

Ahora, me interesa lo que dice ContraVeneno.

¿ContraVeneno tienes algun ejemplo?

¿Tu dices que en vez que cargue el archivo Package1.dcp en vez del Package1.bpl?
Responder Con Cita
  #2  
Antiguo 10-02-2011
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.289
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 adonias Ver Mensaje
Ahora, me interesa lo que dice ContraVeneno.
¿ContraVeneno tienes algun ejemplo?
¿Tu dices que en vez que cargue el archivo Package1.dcp en vez del Package1.bpl?
Pues en uno de los ejemplos que te he pasado, si no me equivoco tienes justamente ese ejemplo (aunque ampliado).



Tu PlugIn Base corresponde al package PlugBasic.bpl, que hace de "package intermedio"; Se carga de forma estática y el resto de packages que se cargan con LoadPackage (dinámicamente) derivan de el.

De esta forma cuando cargas el Plugin3 (que deriva de plugBasic) puedes acceder a él con los métodos genericos de PLugBase.
__________________
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 10-02-2011
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Es exactamente lo que comenta maese Neftalí... yo no podría explicarlo mejor.
__________________

Responder Con Cita
  #4  
Antiguo 10-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Muchas gracias a los 2.

Lo he logrado utilizar el PlugBase

Ahora, el problema que tengo es capturar el evento onClose, y onHide

Este es el codigo

Código Delphi [-]

unit Principal;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, ShellApi,
Graphics, Controls, Forms, Dialogs, StdCtrls;

Type
TEvnPro = class(TForm)
    procedure FormHide(Sender : TObject; var Action : TCloseAction);
end;

var
  EvnPro : TEvnPro;
  AClass: TPersistentClass;
  handle: HModule;
  Titulo, Version: TComponent ;
  FBase : Tform;
  Ver : Boolean;


implementation
{$R *.DFM}

Function VersionProg(*****):Boolean;stdcall;external 'lib/Version.dll';

Procedure TEvnPro.FormHide(Sender : TObject; var Action : TCloseAction);
begin
    showMessage('Te Pille');
end;

initialization

    {* verifico la version del programa *}
     Ver := VersionProg(***);

    if Ver then begin

      {* verifico que el modulo existe, junto con el archivo *}
      if FileExists('bin/PlugBase.bpl') then
      begin
          {* Cargo el modulo a memoria *}
          handle := LoadPackage('bin/PlugBase.bpl');

          {* si es un modulo válido *}
          if handle <> 0 then
            begin

            AClass := GetClass('TBase');
            if AClass <> nil then
            begin

              FBase := nil;
              FBase := TComponentClass(AClass).Create(Application) as TForm;
              FBase.Tag := handle;

              FBase.ShowModal;

              FBase.OnHide := TEvnPro.FormHide;    <-- No puedo Capturar el Evento (E2009 Incompatible types: 'Parameter lists differ')

            end;
          end;
      end;

    end
    else begin

      showmessage( 'Versión Incorrecta!' );

    end;


end.

Muchas gracias nuevamente por la ayuda
Responder Con Cita
  #5  
Antiguo 11-02-2011
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.289
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
Se puede hacer lo que quieres, pero tal y como lo tienes hecho hay algunos problemas:

(1) Los parámetros del evento OnHide, no coinciden con los de la rutina que estás colocando; Creo que te has hecho un lío con el OnClose.

Código Delphi [-]
    procedure myFormHide(Sender : TObject);

(2) Esta línea también tiene "cosas raras":
Código Delphi [-]
FBase.OnHide := TEvnPro.myFormHide;
Piensa que estás asignando el evento FormHide, no de ningun objeto, sino que pones directamente la referencia a una clase (TEnvPro....), además de lo comentado de que nocoinciden los parámetros.

(3) Si colocas el evento en el Initialization tendrás que acer referencia al evento como:

Código Delphi [-]
FBase.OnHide := EvnPro.myFormHide;

Te paso un ejemplo con algunos cambios.

Archivos Adjuntos
Tipo de Archivo: zip ejemplo_packages.zip (7,8 KB, 24 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
  #6  
Antiguo 14-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Muchas gracias Neftali...

La verdad es que estoy medio confundido.

He estado programando bastanbte tiempo en Extjs y PHP, y uno se acostumbra a clases y a programar de una manera mas flexible.

Siempre cuando empiezo un proyecto me gusta trabajar por modulos, ya que es mas facil detectar los problemas.

Ahora, este es el esquema de lo que estoy haciendo.



No se si sera el correcto desde tu punto de vista.

1.- El programa parte con la carga del unit Main.pas

2.- Luego que verifico que la version este ok, cargo el BPL Base, como tu lo recomendaste.

3.- El BPL Base tiene unas variables para verificar si estoy logueado o no. Si NO estoy logueado, llamo al Bpl login.

Una vez que el BPL login me responde true o false.

Retorno, la respuesta al Main, y comienzo a cargar los otros BPL a travez del BPL Base.
Responder Con Cita
  #7  
Antiguo 14-02-2011
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.289
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 Adonias.
Es tema que planteas es difícil.
Los packages no son la "panacea" y no creo que la solución sea utilizar packages para todo. Como ya has visto, trabajar con packages no es sencillo y además conlleva una complicaión adicional a la hora de programar.

Lo primero que hay que diferenciar a la hora de trabajar con packages es si estamos hablando de carga estática o dinámica.

(1) Carga estática.
Trabajar con carga estática, creo que es más una decisión de diseño. En este caso la complicación no es tanta y podemos programar de una forma "más normal". Seguramente la división por packages en este caso, está más enfocada a aplicaciones grandes o muy grandes, que requieren una organización conceptual en bloques o por temas de dicisión conceptual.

(2) Carga dinámica.
En este caso ya es un cambio radical y no debemos tomarlo a la ligera. La carga dinámica de packages tienes ventajas y algunas de las características que consigues utilizándola, no podrías obtenerlas de otra manera; Características como el trabajo con de Plugins o Addins, modilaridad total, independencia,... El problema es que el "precio a pagar" también es alto, pues debes trabajar utilizando RTTI; Esto no es lo más sencillo ni lo más óptimo (como ya se ha comentado aquí).

Lo que quiero decir con esto, es que es una decisión importante y no se debe tomar a la ligera. Se debe tener en cuenta que los packages "no son la mejor opción siempre", hay que pensar si para lo que vamos a realizar nos viene bien utilizar esta opción, o si para las necesidades que tiene nuestro proyecto nos va bien utilizar packages.
__________________
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
Comunicacion entre aplicaciones erickahr Varios 0 21-06-2010 18:56:48
comunicación entre dos aplicaciones? reinier Redes 1 08-05-2008 11:28:15
Comunicacion entre procesos walito Varios 0 14-11-2007 21:55:53
Comunicacion entre delphi y php vilamm PHP 3 15-12-2006 20:34:43
Comunicación entre PC por Lan c748a Varios 1 04-05-2004 08:51:21


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


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