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 09-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Componentes en librerias DLL

Hola.

Una consulta basica.

Cuando creo un Form, luego puedo llamar sus componentes

Ejemplo:

Código Delphi [-]
 
...  

uses Componentes;
 
...    

Componentes.UniConnection1.Server  := ComboBox1.Text;   
Componentes.UniConnection1.UserName:= Usuario.Text;   
Componentes.UniConnection1.Password:= Pass.Text;   
Componentes.UniConnection1.ProviderName:='Oracle';   
Componentes.UniConnection1.Connect; 

...

Ahora. Cuando creo una libreria DLL, llamo funciones asi:


Código Delphi [-]
  
...  

Procedure ShowAbout(Atitle:string);stdcall;external 'Function.dll';  

...  

ShowAbout('Acerca de Funciones en DLL externas');  

...

¿Podria llamar a UniConnection1 desde la dll?


Algo asi como

Código Delphi [-]
  
  Dll.UniConnection1.Server  := ComboBox1.Text;
  Dll.UniConnection1.UserName:= Usuario.Text;
  Dll.UniConnection1.Password:= Pass.Text;
  Dll.UniConnection1.ProviderName:='Oracle';
  Dll.UniConnection1.Connect;

Gracias!
Responder Con Cita
  #2  
Antiguo 09-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.295
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
Creo que lo correcto es que le pases a la DLL los valores y en todo caso que desde la DLL se asignen los valore a los componentes.

De todas maneras no accedes a la DLL como variable, sino que dentro tendrás un Form (me imagino) con componentes dentro, así que en cualquier caso seguirás accediendo al form.
__________________
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 09-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Estube buscando en el foro, y lei que hay componentes BPL.

Una vez que los cargo con LoadPackage, puedo llamar alguno de los componentes?
Responder Con Cita
  #4  
Antiguo 09-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Ok.

Hasta aqui voy bien.

Cargo el paquete en el form1
Código Delphi [-]
procedure TFrm.FormCreate(Sender: TObject);
var
  PackageModule: HModule;
  AClass: TPersistentClass;
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
        ShowModal;
        labelForm2.Caption := 'hola';   <---- No llego al form2
        Free;
      end;

    UnloadPackage(PackageModule);
  end;

end;

El problema es cuando intento llegar al label del form2
Responder Con Cita
  #5  
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.295
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
Lo primero que veo es que si utilizas ShowModal, no accederás a la línea que comentas hasta que no cierres el formulario,por lo tanto en este caso debería utilizar Show.

Por otro lado, como estás accediendo al formulario de forma genérica, para acceder al label puedes utilizar FindComponent, por ejemplo.

Cambia el código por este:

Código Delphi [-]
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;

Además en el package debes registrar la clase del formulario para poder encontrarla posteriormente con GetClass.

Al final de la Unit del Form2 coloca este código:


Código Delphi [-]
initialization
  RegisterClass(TForm2);

finalization
  UnregisterClass(TForm2);

Por último asegurate de que estás compilando el proyecto con la opción "Build with runtime Packages".

Descarga este ejemplo y revisa el código, creo que te puede ser de utiidad (Sistema de plug-ins utilizando packages dinámicos).

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
  #6  
Antiguo 10-02-2011
Avatar de adonias
adonias adonias is offline
Miembro
 
Registrado: ago 2007
Posts: 45
Poder: 0
adonias Va por buen camino
Tu lo haces ver tan facil neftalí!!!


Funciono perfecto...

Muchisimas gracias Master!

Última edición por adonias fecha: 10-02-2011 a las 13:46:46.
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
Como cargar componentes activeX y librerias en el ejecutable tom_rkx C++ Builder 3 09-04-2008 22:38:57
Librerias Bonachon Conexión con bases de datos 2 18-01-2007 01:54:46
librerias javikanin Varios 0 09-11-2004 22:11:20
librerias kwan Conexión con bases de datos 7 16-09-2003 23:53:21
Librerias esquerda21 Gráficos 6 08-08-2003 09:47:08


La franja horaria es GMT +2. Ahora son las 14:06:27.


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