Fórum Como passar parâmetros entre 2 forms #163109
28/05/2003
0
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
Curtir tópico
+ 0Posts
28/05/2003
Aroldo Zanela
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
29/05/2003
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
26/07/2006
Macario
Alguem tem uma dica. 8)
Gostei + 0
26/07/2006
Jáder Medeiros
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
Clique aqui para fazer login e interagir na Comunidade :)