Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 23-01-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
cd.rafael,

Cita:
Empezado por cd.rafael
He revisado muchos temas respecto al manejo de forms dentro de una dll y hasta ahora no he podido resolver mi problema, que a continuación expongo: Tengo un ejecutable normal el cual invoca a una dll que a su vez lanza una form. Si dicha form la muestro con "ShowModal" todo funciona bien, pero si la dejo solo como "Show", el ejecutable deja de responder.
Revisa este código:
Código Delphi [-]
Library DLLForm;

uses
  SysUtils,
  Forms,
  UnitFrmDLL in 'UnitFrmDLL.pas' {FrmDLL};

{$R *.res}

procedure ShowForm; StdCall;
var
   f : TFrmDLL;
begin
   f := TFrmDLL.Create(Application);
   f.Show;
end;

exports
   ShowForm;

begin
end.
El código anterior declara una DLL (DLLForm) que Exporta el Procedure ShowForm el cual muestra un formulario con el método Show declarado en la unidad UnitFrmDLL.pas

Revisa el código de la Unidad UnitFrmDLL del DLL anterior.
Código Delphi [-]
unit UnitFrmDLL;

interface

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

type
  TFrmDLL = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  function mSum(x1, x2 : Double) : Double;
  function mSub(x1, x2 : Double) : Double;
  function mMul(x1, x2 : Double) : Double;
  function mDiv(x1, x2 : Double) : Double;

implementation

{$R *.dfm}

function mSum(x1, x2 : Double) : Double;
begin
   Result := x1 + x2;
end;

function mSub(x1, x2 : Double) : Double;
begin
   Result := x1 - x2;
end;

function mMul(x1, x2 : Double) : Double;
begin
   Result := x1 * x2;
end;

function mDiv(x1, x2 : Double) : Double;
begin
   Result := x1 / x2;
end;

procedure TFrmDLL.Button1Click(Sender: TObject);
var
   x1, x2 : Double;
begin
   x1 :=  StrToFloat(Edit1.Text);
   x2 :=  StrToFloat(Edit2.Text);
   ShowMessage(FloatToStr(mSum(x1,x2)));
end;

procedure TFrmDLL.Button2Click(Sender: TObject);
var
   x1, x2 : Double;
begin
   x1 :=  StrToFloat(Edit1.Text);
   x2 :=  StrToFloat(Edit2.Text);
   ShowMessage(FloatToStr(mSub(x1,x2)));
end;

procedure TFrmDLL.Button3Click(Sender: TObject);
var
   x1, x2 : Double;
begin
   x1 :=  StrToFloat(Edit1.Text);
   x2 :=  StrToFloat(Edit2.Text);
   ShowMessage(FloatToStr(mMul(x1,x2)));
end;

procedure TFrmDLL.Button4Click(Sender: TObject);
var
   x1, x2 : Double;
begin
   x1 :=  StrToFloat(Edit1.Text);
   x2 :=  StrToFloat(Edit2.Text);
   ShowMessage(FloatToStr(mDiv(x1,x2)));
end;

procedure TFrmDLL.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;

end.
Este formulario es instanciado en el Procedure ShowForm Exportado en el DLL anterior.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure ShowForm; StdCall; External 'DLLForm';

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowForm;
end;

end.
El código anterior declara una referencia al procedure ShowForm del DLL anterior e invoca una llamada al mismo.

Revisa estos links:
Cita:
Creating and Using DLLs from Delphi
http://delphi.about.com/od/windowssh...dll_basics.htm

Static vs. Dynamic Dynamic Link Library Loading - A Comparison
http://delphi.about.com/od/windowssh...ic-dynamic.htm

Creating and Using DLLs from Delphi
http://delphi.about.com/od/windowssh...dll_basics.htm

Tutorials - Adding forms to a DLL
http://www.delphi-central.com/formdll.aspx
Todo el código anterior este disponible en el link: http://terawiki.clubdelphi.com/Delph...orm_in_DLL.rar

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 23-01-2013 a las 02:40:22.
Responder Con Cita
 



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
Error al crear un MDI Form jafera OOP 6 19-07-2011 14:10:13
Error con AdoQuery y 2 Form Dado de baja Conexión con bases de datos 2 23-10-2008 17:37:04
Error al crear MDI Form Faust Varios 8 23-04-2008 05:12:01
Error en form de login FGarcia Varios 2 05-02-2006 05:00:27
Error Creating Form RolphyReyes Varios 4 02-09-2005 19:56:42


La franja horaria es GMT +2. Ahora son las 10:44:35.


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