Passando o valor de uma variável da tela de login para o formulário principal através do projet

Delphi

08/08/2021

Boa tarde, eu preciso passar o ID do usuário e o nome dele para a tela principal. Estou criando os Forms da seguinte maneira no view source do projet.


var USR_ID, USR_NOME, MAIN_CAPTION : String;
    hMutex: Thandle;

if WaitForSingleObject(hMutex,0) <> wait_TimeOut then begin
    Application.Initialize;
    Application.CreateForm(TDM, DM);
    Application.CreateForm(TFrm_Sys_Login, Frm_Sys_Login);
    { Caso o retorno da tela seja Ok }
    if Frm_Sys_Login.ShowModal = mrOk then begin
      USR_ID        :=  uLogin.USRID;
      USR_NOME      :=  uLogin.USRNOME;
      MAIN_CAPTION  :=  uLogin.MAINCAPTION;
      FreeAndNil(Frm_Sys_Login);
      Application.CreateForm(TFrm_Sys_Main, Frm_Sys_Main);
      Frm_Sys_Main.Caption  :=  MAIN_CAPTION;
      uMain.USR_Nome        :=  USR_NOME;
      uMain.ID              :=  USR_ID;
      Application.Run;
    end else begin
      Application.Terminate;
    end;
  end else begin
    Application.Terminate;
  end;

Através da tela de login eu jogo o valor nas variáveis do projet e depois eu jogo do projet para o mainform. Porém quando passo o valor das variáveis USR_ID, USR_NOME para as variáveis do main form não funciona elas ficam em branco.

Já tentei dar um FreeAndNil depois da criação do main form e passar as variáveis diretamente mas ai fecha o mainform também.

Não sei se essa é a melhor forma ou a forma mais correta de passar os valores para o main form.
Paulo

Paulo

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

08/08/2021

não funciona ao passar para o main form, ou não funciona ao pegar do login?

se você colocar um breakpoint na linha FreeAndNil(Frm_Sys_Login); as variáveis acima têm valor?

GOSTEI 0
Paulo

Paulo

08/08/2021

não funciona ao passar para o main form, ou não funciona ao pegar do login?



Não funciona ao passar p/ o main form.

se você colocar um breakpoint na linha FreeAndNil(Frm_Sys_Login); as variáveis acima têm valor?



Sim.

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

08/08/2021

talvez o sistema esteja se confundindo, visto que as variáveis têm os mesmos nomes.
tente assim:
    if Frm_Sys_Login.ShowModal = mrOk then
    begin
      Application.CreateForm(TFrm_Sys_Main, Frm_Sys_Main);
      Frm_Sys_Main.Caption  :=  uLogin.MAIN_CAPTION;
      uMain.USR_Nome        :=  uLogin.USR_NOME;
      uMain.ID              :=  uLogin.USR_ID;
      FreeAndNil(Frm_Sys_Login);
      Application.Run;
    end
    else
      Application.Terminate;


GOSTEI 0
Paulo

Paulo

08/08/2021

talvez o sistema esteja se confundindo, visto que as variáveis têm os mesmos nomes.
tente assim:
    if Frm_Sys_Login.ShowModal = mrOk then
    begin
      Application.CreateForm(TFrm_Sys_Main, Frm_Sys_Main);
      Frm_Sys_Main.Caption  :=  uLogin.MAIN_CAPTION;
      uMain.USR_Nome        :=  uLogin.USR_NOME;
      uMain.ID              :=  uLogin.USR_ID;
      FreeAndNil(Frm_Sys_Login);
      Application.Run;
    end
    else
      Application.Terminate;




Fazendo dessa forma quando chega no

FreeAndNil(Frm_Sys_Login);


Ele some com o mainform
GOSTEI 0
POSTAR