Como passar parâmetros entre 2 forms
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]
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
Curtidas 0
Respostas
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:
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
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
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
28/05/2003
Estou em situação semelhante.
Alguem tem uma dica. 8)
Alguem tem uma dica. 8)
GOSTEI 0
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.
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