Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Componentes en DLL (https://www.clubdelphi.com/foros/showthread.php?t=67986)

ethangio 18-05-2010 06:22:01

Componentes en DLL
 
Que tal amigos del foro, espero que sea el lugar indicado para mi pregunta y gracias por responder.

Pues he buscado y he encontrado muy poca informacion, alguien me puede decir si es posible crear componentes solo componentes en una DLL o tengo que hacer mi formulario ?

Me refiero que tengo mi aplicacion exe por un lado y quiero solo crear el componente digamos Tedit con caracteristicas definidas ancho color font etc.

Y si me podrian ayudar con un pequeño ejemplo.

Gracias de antemano.

Neftali [Germán.Estévez] 18-05-2010 11:14:05

No acabo de entender muy bien lo que necesitas.
Hay cosas que comentas que no tienen sentido (al menos para mi).

En Delphi los componentes se crean en Packages (BPL) si deseas instalarlos en el IDE. Si no deseas instalarlo en el IDE y sólo crearlo en ejecución, tal vez sí, como cualquier otro objeto, pero es algo muy extraño.
Por otro lado dices que quieres almacenar el componente en una DLL, pero no el formulario, pero un Edit debes utilizarlo en un formulario :confused::confused::confused::confused:

ethangio 19-05-2010 04:23:59

Componentes DLL
 
Disculpa si no me explique bien, pero lo que estoy haciendo es esto.

Tengo mi aplicacion EXE y quiero que en una libreria DLL tener un procedimiento o funcion que me cree un Tedit (edit)

ejemplo:
Mi DLL

Código Delphi [-]
library Project1;

uses
  SysUtils, Classes, StdCtrls, Forms, Windows, Controls, Dialogs,
  CommCtrl;

{$R *.res}

procedure CreaEdit(Self: TWinControl); stdcall; export;
var
Edit1, Edit2: TEdit;
Label1: TLabel;
begin
Edit1:=TEdit.Create(Self);
Edit1.Parent:=Self;
Edit1.Top:=20;
Edit1.Left:=50;
Edit1.Name:='Caja1';
Edit1.Text:='Hola Fui creado desde codigo...';

Edit2:=TEdit.Create(Self);
Edit2.Parent:=Self;
Edit2.Top:=60;
Edit2.Left:=50;
Edit2.Name:='Caja2';
Edit2.Text:='Hola Fui creado desde codigo ...';

Label1:=TLabel.Create(Self);
Label1.Parent:=Self;
Label1.Top:=100;
Label1.Left:=50;
Label1.Name:='label1';
Label1.Caption:='Hola Fui creado desde codigo ...';

ShowMessage('Segun se ejecuta...');
end;

exports CreaEdit;

end.

Mi EXE

Código Delphi [-]

unit Unit1;

interface

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

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

var
  Form1: TForm1;

procedure CreaEdit(Form1: TForm1); stdcall; external 'Project1.dll';


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  CreaEdit(Form1);
end;

end.

Neftali [Germán.Estévez] 19-05-2010 12:15:41

No lo he probado y creo que debería poderse hacer, aunque creo que te sería bastante más sencillo y menos problemático utilizar una BPL en lugar de una DLL.

De todas formas, sigo sin entender cual es la lógica de esta operación. Tal vez si nos explicaras para qué necesitas hacer esto enteríamos mejor cual es el objetivo y tal vez te podríamos proponer algun procedimiento alternativo, ya que como te he dicho, aunque creo que es posible, no le veo ninguna lógica.

ethangio 19-05-2010 19:28:46

Componentes en DLL
 
Pues soy algo nuevo en delphi y mi forma de programar ha sido minuciosa en cuestion de codigo que quiero mantener el control total de un proyecto.

Todo esto es con fin de estudio, pero en si lo que quiero hacer es que tengo mi formulario en un vcl form mi aplicacion mi exe ... y quiero que en las dll crear o hacer el diseño de algunos componentes como un edit fijos en tamaño, color, fuente, o un label en fuente .. has de cuenta como si fueran mis estilos.

Asi en mi formulario digamos
crealabel(x,y,font) etc. entonces en mi aplicacion en tiempo de ejecucion se creará un Tlabel en la posicion x,y de tal fuente sin tener que estar poniendo las caracteristicas de cada label.

tal vez se me ocurre la conexion a una base de datos, un ejecutador de querys:

Query("select", "*", tabla,"condicion","ordenamiento","limite")

asi para cuando tenga que modificar no este con cada Form peleandome en los estilos de cada componente.

No se si esté muy viajado ... y si me dan algunas soluciones.

Las bpl ya lei sobre ellas pero me interesan mas las DLL porque pueden ser utilizadas por vb y delphi ... y otras ventajas que tienen las DLL.

Gracias por su tiempo. Les agradezco.

Neftali [Germán.Estévez] 19-05-2010 19:57:06

Bueno, te diré a nivel general que la idea puede ser buena, pero la forma en que la estás enfocando creo que es incorrecta (a mi entender).

Se supone que Delphi es un Entorno RAD (Rapid Application Development). Una de las mejores cosas que tiene es, el diseño visual de formularios, que digamos es la parte más tediosa y menos importante de la aplicación, frente a la lógica propia de la aplicación. Y tú estás intentando dejar todo eso de lado para volver al desarrollo como si estuvieras en COBOL. :(:(:(:(

Creo que hay formas más lógicas (utilizando delphi) de hacer lo que necesitas. Sin ir más lejos, la herencia.

Deriva el Label estandard a un componente propio (TMiLabel), modifica sus propiedades como deses y utilízalo. Si más adelante necesitas cambiar "algo" en todos tus Labels, basta con que lo modifiques en tu componente TMiLabel y automáticamente todos los que tienes colocados se actualizarán.
Incluso en ese componente propio puedes programar varios estilos, de forma que si cuando coloques un label, sólo seleccionando el "Estilo1" tendrás X propiedades prefijadas, seleccionando el "Estilo2" tendrás otras, y así con tantos como necesite....

En cuando a las DLL's/BPL's, tienes que saber que las BPL's son como DLL's ampliadas, así que todo lo que puedas hacer con una DLL, lo puedes hacer con una BPL, además de muchas otras. Lo único, eso sí, que la BPL sólo podrás utilizarla en Delphi; Pero tengo mis dudas que que esta DLL que estás diseñando en Delphi se pueda utilizar en VB.

ethangio 19-05-2010 23:34:31

Componentes DLL
 
Me parece muy buena idea la herencia.

1.- Y me podrias dar tu opinion, y siendo otra solucion la de meter Form
(formularios) en DLL´s.

2.- Y si se puede que en una DLL llame una funcion o procedimiento de otra DLL.

Gracias por todo. Neftali Gracias por responder.

Neftali [Germán.Estévez] 20-05-2010 10:06:38

Cita:

Empezado por ethangio (Mensaje 364696)
Me parece muy buena idea la herencia.

Creo que es lo que necesitas.
Yo mismo la he utilizado para algio similar a lo que te digo en proyectos grandes donde intervienen varios programadores. Derivas los componentes y creas unos nuevos con una serie de propiedades "fijadas", de forma que todos los programadores utilizan esos componentes y:
(1) Te evitas cambiar determinadas propiedades para ponerlas en todos sitios igual.
(2) Evitas que los componentes se vean o actuen distinto en varios sitios de la aplicación; Estandarizas el aspecto y la funcionalidad.
(3) es más cómodo a la hora de modificar algo en todos los componentes (como tú decías).
...

Cita:

Empezado por ethangio (Mensaje 364696)
1.- Y me podrias dar tu opinion, y siendo otra solucion la de meter Form
(formularios) en DLL´s.

Es una buena forma de "modularizar" la aplicación y de compartir código (formularios, procedimientos, funciones,...) entre diferentes aplicaciones. Si vas a usarlo sólo en delphi utiliza BPL's, si vas a utilizarlos en otros leguajes, utiliza DLL's.

Si miras en el FTP del club (seccion ejemplos) verás que hay varios ejemplos de DLL's. Uno para incluir forms en DLL's, otro para tareas y otro para usar formularios MDI (busca los ficheros que en el nombre incluyen dll).


Cita:

Empezado por ethangio (Mensaje 364696)
2.- Y si se puede que en una DLL llame una funcion o procedimiento de otra DLL.

Diría que sí, de forma similar a como se hace la llamada desde cualquier otro punto del programa.
Revisa los ejemplos, y si tienes problemas, ya dirás...


La franja horaria es GMT +2. Ahora son las 12:27:28.

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