Passagem Parametros Entre Formulários

Delphi

16/09/2013

Alguem saberia me dizer se é possível eu abrir um form passando um parâmetro para dentro dele?

Isso nem necessidade de utilizar variável global.

Obrigado!!!
Pirasol

Pirasol

Curtidas 0

Respostas

Marcos Oliveira

Marcos Oliveira

16/09/2013

Você pode criar uma procedure, ou function dentro do form com algum parâmetro e depois dar o show ou showmodal, conforme exemplo abaixo:

// No form2:
procedure TForm2.AbrirForm(Parametro1, Parametro2, ParamentroN: String);
begin
     // Aqui você pode tratar os parâmetros ou salvá-los em variáveis.
     Form2.ShowModal;
end;

// No Form1, para chamar o form2 passando parâmetros:
Form2.AbrirForm('1','2','N');



Att,

Marcos
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

16/09/2013

Você também pode sobrescrever o constructor e criar uma sobrecarga que receba parâmetros.
GOSTEI 0
Rodrigo Cordeiro

Rodrigo Cordeiro

16/09/2013

Mais uma opção: Cria um método de classe que recebe os parâmetros que você precisa e nele você já instancia o form:

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    BitBtn1: TBitBtn;
  private
    { Private declarations }
  public
    class function Execute(par1, par2 : String) : Boolean;
  end;

implementation

{$R *.dfm}

{ TForm2 }

class function TForm2.Execute(par1, par2 : String) : Boolean;
var
  Form2 : TForm2;
begin
  Form2 := TForm2.Create(Application);
  Form2.Edit1.Text := par1;
  Form2.Edit2.Text := par2;
  Result := Form2.ShowModal = mrOK;
end;

//Chamada no Form1:
if TForm2.Execute('texto1', 'texto2') then ShowMessage('OK');


[]'s

Rodrigo Cordeiro - qmd
qmd@usercontrol.com.br
GOSTEI 0
Rodrigo Cordeiro

Rodrigo Cordeiro

16/09/2013

Mais uma opção: Cria um método de classe que recebe os parâmetros que você precisa e nele você já instancia o form:

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    BitBtn1: TBitBtn;
  private
    { Private declarations }
  public
    class function Execute(par1, par2 : String) : Boolean;
  end;

implementation

{$R *.dfm}

{ TForm2 }

class function TForm2.Execute(par1, par2 : String) : Boolean;
var
  Form2 : TForm2;
begin
  Form2 := TForm2.Create(Application);
  Form2.Edit1.Text := par1;
  Form2.Edit2.Text := par2;
  Result := Form2.ShowModal = mrOK;
  FreeAndNil(Form2);
end;

//Chamada no Form1:
if TForm2.Execute('texto1', 'texto2') then ShowMessage('OK');


[]'s

Rodrigo Cordeiro - qmd
qmd@usercontrol.com.br


Olha o vazamento de memória ai... no código eu esqueci de destruir e liberar a memória do form2! :)
GOSTEI 0
Pirasol

Pirasol

16/09/2013

Deu certo, obrigado a todos!!!!
GOSTEI 0
Deivison Melo

Deivison Melo

16/09/2013

Finalizando o tópico!
GOSTEI 0
POSTAR