Chamar form sem criá-lo

22/11/2019

0

Boa noite pessoal!

Procurei aqui no forum, porém não encontrei nada. Seguinte, eu criei um form no estilo showMessage, onde eu tenho uma procedure para cada tipo de mensagem "Erro, Informativa e alera". Na minha procedure, passo o título e a mensagem, porém preciso ficar criando ela a todo momento (Application.createform......) e depois matando (form.free). Teria alguma maneira (Além de já iniciar o projeto com o form criado), de chamar esse form "Showmessage", sem ter que ficar criando e matando ele a todo momento que eu chamar?

Desde já, agradeço!
Wesley Silva

Wesley Silva

Responder

Post mais votado

23/11/2019

Boa tarde, Sandra, tudo bem?

Por se tratar de um form você terá que instanciá-lo em algum momento para fazer sua utilização.

Mas dá pra fazer uma lógica para que não precise fazer o passo de instanciar um objeto, utilizá-lo e depois liberá-lo da memória, deixando essa rotina em inteira responsabilidade do seu formulário de mensagens.

Essa lógica é divida em dois passos:

No seu formulário de mensagem você irá criar uma procedure fora da type (para que a procedure possa ser chamada sem a criação efetiva do form). Ela será responsável pela criação do seu formulário. Segue código abaixo:

unit UFrm_Message;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
TFrm_Message = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

procedure abrirTela(TipoMensagem: String);

var
Frm_Message: TFrm_Message;

implementation

{$R *.dfm}

procedure abrirTela(TipoMensagem: String);
begin
Application.CreateForm(TFrm_Message, Frm_Message);
//Passagem de parametros para varíavel/objeto
Frm_Message.ShowModal;
end;

end.

O segundo passo seria a chamada dessa procedure. No caso, em outra tela, você só precisará adicionar seu formulário de mensagem no uses e chamar a procedure 'abrirTela'. Segue código abaixo:

procedure TForm2.Button1Click(Sender: TObject);
begin
UFrm_Message.abrirTela('Informação');
end;

Dessa forma, ao fechar o formulário de mensagem, o próprio form se responsabilizará de liberar da memória, tento isso na sua herança. Ou seja, toda sua lógica fica no seu formulário de mensagem e você só precisará fazer a chamada da procedure 'abrirTela' quando precisar usá-la, assim como faz a chamada da procedure 'ShowMessage'.

Caso alguém saiba outra forma ficarei muito contente em aprender. Qualquer dúvida é só perguntar. Espero ter ajudado!

Eduardo Zanardo

Eduardo Zanardo
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar