Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mr. Shorewall

Alterando propriedades do form atraves de uma dll

Recommended Posts

Buenas noches srs...

assim...

estou desenvolvendo um aplicativo que realiza o cadastro de vaaarios equipamentos de informatica só que alguns tem que ter cadastros especiais...

daí eu tive a idéia de criar um form unico e ali ir add e/ou modificando o nome dos labels atraves de uma dll...na dll ficaria uma função mais ou menos assim...

 

Function Mod_Form: Integer; Stdcall;

Begin

form1.label1.caption:=' Modo de Comunicação';

.

.

.

e seguiria com a sua programação...

End;

Export Mod_Form;

 

Claro, isto é só um exemplo para se localizarem no problema..

e nor form principale iria colocar um combobox com os itens para escolher...

aguardo resposta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você pode apontar os metodos dos seus forms e objetos para metodos de outros objetos. Você cria um objeto com eventos dentro de sua dll

 

TObjetoDaDll = class(TObject)
	public
 	public OnClickDoBotaoUm(Sender:TOBject)
 	public OnClickDoBotaoDois(Sender:TOBject)
 	public OnClickDoBotaoTres(Sender:TOBject)
 	public OnClickDoBotaoQuatro(Sender:TOBject)
 	public OnClickDoBotaoCinco(Sender:TOBject)
 	public OnClickDoBotaoSeis(Sender:TOBject)

end;

implemtação do objeto
implemtação do objeto
implemtação do objeto
implemtação do objeto
implemtação do objeto
implemtação do objeto
...

Faz as implemtações necessárias e então, para cada dll você cria uma função chamada Main (pode ser outro nome, mas todas as dlls com o mesmo nome) e nesta função você:

1) Instancia o objeto que você criou com os eventos

2) Aponta os eventos do form para ele

3) Muda os nomes doa labels e tals

 

a função main seria mais ou menos assim

var
	ObjetoEventos : TObjetoDaDll;
procedure mains(Sender: TForm1);
begin
 	//mudar os textos
 	Sender.Label1.Caption := 'Texto';
 	Sender.Caption := 'Titulo do form';
 	//Instanciar o objeto
 	ObjetoEventos := TObjetoDaDll.Create;
 	//Os eventos
 	Sender.Button1.OnClick := ObjetoEventos.OnClickDoBotaoUm;
 	Sender.Button2.OnClick := ObjetoEventos.OnClickDoBotaoDois;
 	Sender.Button3.OnClick := ObjetoEventos.OnClickDoBotaoTres;
 	Sender.Button4.OnClick := ObjetoEventos.OnClickDoBotaoQuatro;
 	Sender.Button5.OnClick := ObjetoEventos.OnClickDoBotaoCinco;
 	Sender.Button6.OnClick := ObjetoEventos.OnClickDoBotaoSeis;
end;

NOTA: Não testei isto, para funcionar você teria que incluir no seu projeto da dll, uma copia do Form1

 

Espero que você entenda e que lhe ajude, qualquer coisa poste ai novamente. A Idéia é mais ou menos esta

Compartilhar este post


Link para o post
Compartilhar em outros sites

eae cara..dei uma olhada na tua idéia, ela é boa...daí fiz uns texte beem simples tipo..

criei um form com um botão e um label

e na dll eu pus o seguite código:

 

library formdll;

 

uses

Sharemem,

SysUtils,

Classes,

Unit1 in 'Unit1.pas' {Form1};

procedure mains(Sender: TForm1); Stdcall;

 

{$R *.res}

 

procedure mains(Sender: TForm1);

begin

Sender.Label1.Caption := 'Texto';

end;

 

begin

End;

end.

 

 

Daí o Delphi compila beleza a dll e no form1 ta igual no código abaixo...

 

unit Unit1;

 

interface

 

uses

Sharemem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

 

type

TForm1 = class(TForm)

Button1: TButton;

Label1: TLabel;

procedure Button1Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

Procedure mains; Stdcall; external 'formdll.dll';

 

procedure TForm1.Button1Click(Sender: TObject);

begin

mains;

end;

 

end.

 

Mas qndo um vou compilar o form o delphi me da um erro dizendo que o aplicativo não foi inicializado corretamente...

 

aaacredito q esteja fazendo algo errado, pois estou me aventurando nas dlls e tive um aprendizado de Delphi bem fraco no meu curso..então to indo as cegas...hehehe

se puderes me ajudar ou dar algum material, site ou algo do genero para me guiar pois na net não acho muita coisa...

 

Aguardo resposta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sim, para criar uma DLL no delphi você deve Exportar as funções (Uma dll pode ter funções internas e externas, somente as externas são acessadas por outros processos).

 

para exportar uma função da dll utilize

Exports
	Mains

Se não funcionar, mude a clausula "stdcall" para "export" na sua função

 

procedure mains(Sender: TForm1); Export;

Você deve colocar a sessão "Exports" logo abaixo dos escopos das funções, veja como fica a sua DLL com esta sessão

 

uses
	Sharemem, SysUtils, Classes,
	Unit1 in 'Unit1.pas' {Form1};

	procedure mains(Sender: TForm1); Stdcall;
	
exports
	mains;


{$R *.res}

procedure mains(Sender: TForm1);
begin
	Sender.Label1.Caption := 'Texto';
end;

begin
End;
end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.