Como passar parâmetros entre 2 forms

Delphi

28/05/2003

Como passar parâmetros entre 2 forms
Suponha que você esteja no Form1 e precise chamar o Form2 passando dois parametros (´Aden´ e ´Rodrigues´).
1. Crie as variáveis de instancia do Form2 que receberão os dois parâmetros.
2. Reescreva o Construtor desse form, de forma receber os parametros e atribui-los às suas variáveis de instância:
type
TForm2 = class(TForm)
private
Parametro1 : String;
Parametro2 : String;
public
constructor Create(AOwner : TComponent; pParm1, pParm2 : String);
end;

var
Form2: TForm2;

implementation

Constructor TForm2.Create(AOwner : TComponent; pParm1, pParm2 : String);
begin
inherited Create(AOwner);
Parametro1 := pParm1;
Parametro2 := pParm2;
end;

Agora no seu form1, abra o form2 com a seguinte sintaxe:

With TForm2.Create(self, ´Aden´, ´Rodrigues´) do
Begin
ShowModal;
Free;
End;

Obs: Não deixe o delphi criar automaticamente o formulário. Crie-o (e destrua-o) manualmente.


Constructor TForm2.Create(AOwner : TComponent; pParm1, pParm2 :
String);
begin
[color=blue:ad18634666]inherited Create(AOwner); //nesta linha erro de acesso ao componente [/color:ad18634666]
Parametro1 := pParm1;
Parametro2 := pParm2;
end;

[color=blue:ad18634666]carnette
Está retornando o erro de acesso a endereço de memória,
como se Aowner não tivesse sido criado ou não está visível. Procurei mais informação no help, mas achei fraco. Logo, não consegui resolver.
Então, se não peço demais, me mande um exemplo testado.[/color:ad18634666]



Você pode fazer a mesma coisa com o ShowModal....
procedure ShowModal(Par1, Par2...); override;
como definição da procedure
e dai
procedure ShowModal(Par1, Par2...);
begin
inherited ShowModal;
{... seu código ... }
end;

[color=blue:ad18634666]zerneo
Se coloco override não compila. Se não coloco, roda, mas o form
invocado não recebe o valor do parâmetro enviado na chamada.
Tmb, se puder me enviar um exemplo funcionando.
Agradeço muito aos colegas.
Obrigado.
Delmar[/color:ad18634666]


Delmar

Delmar

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

28/05/2003

Colegas,

Parece que peguei o bonde andando, mas não seria mais simples declarar duas variáveis publicas no Form2 e usar assim:

Form2
Public
 Parametro1: String;
 Parametro2: String;

-------
Form1
.
.
.
OnClick
Application.CreateForm(TForm2, Form2);
Form2.Parametro1 := Valor1;
Form2.Parametro2 := Valor2;
Form2.ShowModal;
Form2.Free;

Form2 := Nil;



GOSTEI 0
Delmar

Delmar

28/05/2003

Aroldo Zanela


Concondo contigo que é mais fácil. Mas é de váriaveis globais ou públicas que quero fugir, para adicionar simplicidade na manutenção futura aos códigos. Singnifica que, tendo parâmetros, nunca os esquecerei de passá-los, pois se esquecer, o compilador reclama.

Apesar de não ter conseguido rodar as soluções propostas pelos colegas Zereno e Carnette, de qualquer forma, agradeço muito. Valeu.
Delmar


GOSTEI 0
Macario

Macario

28/05/2003

Estou em situação semelhante.


Alguem tem uma dica. 8)


GOSTEI 0
Jáder Medeiros

Jáder Medeiros

28/05/2003

Sinceramente não vi nenhuma dificuldade em montar o que foi proposto. Ainda não me acostumei com esse Fórum que só colocam partes de códigos e esquecem de colocar detalhes importantes.
Nesse caso, prefiro colocar toda a Unit aqui pra mostrar o que fiz e que funcionou. Testem aí e vejam se atendeu.
unit Unit1;

interface

uses
Forms, Classes;

type
TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
private
f1,f2: String;
public
constructor Create(AOwner: TComponent; p1,p2: String);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

constructor TForm1.Create(AOwner: TComponent; p1, p2: String);
begin
inherited Create(AOwner);
f1 := p1;
f2 := p2
end;

procedure TForm1.FormClick(Sender: TObject);
begin
with TForm1.Create(Self,´Jáder´,´Medeiros´) do
try
ShowModal
finally
Free
end
end;

end.



GOSTEI 0
POSTAR