Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adriano Calegari

[Resolvido] formularios dinamicos com Application.CreateForm()

Recommended Posts

estou usando o seguinte codigo:

 

procedure procedure_nome;

begin

if form_nome = nil then

Application.CreateForm(Tform_nome, form_nome);

form_nome.Show;

end;

 

 

quero chamar a procedure no evento onclick de um botão, da seguinte forma:

 

procedure_nome(form_nome*);

 

*nome de qualquer form

 

Então? Como devo escrever de forma correta esta procedure?

 

Pois vou ter que mostrar um milhão de forms com nomes diferentes, rsss.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma procedure simples ... veja se lhe ajuda:

procedure CreateForm(Form: TForm; Classe: TFormClass);
begin
  if (Form = nil) then
  begin
	Form:= Classe.Create(Application);
	Form.ShowModal;
	Form:= nil;
	Form.Free;
  end;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

so falta fazer um complemento no codigo, pois estou usando aplicação MDI. Não quero que crie e mostre a mesma instancia do form. Show Modal não posso usar. Ve pra mim por favor. Obrigado.

Para isso basta remover o bloco if do meu codigo e remover a funcao .showmodal ....

Compartilhar este post


Link para o post
Compartilhar em outros sites

mais então você deve fazer como te disse antes:

 

procedure CreateForm(Form: TForm; Classe: TFormClass);
begin
  if (Form = nil) then
  begin
	Form:= Classe.Create(Application);
	[b]Form.ShowModal; //Somente retira esta linha[/b]
	Form:= nil;
	Form.Free;
  end;
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora sim Funcionou, você já tinha escrito certo mas não tinha compreendido.

 

Tem como de alguma forma fazer esta procedure com que so preciso escrever o nome da classe do form ou somente o form?

 

CreateForm(Form: TForm);

 

ou CreateForm(Classe: TFormClass);

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei fazer mas não consegui, estou tendo problema com incompatibilidade de tipos de variaveis.

 

Não preciso relembrar os codigo só me escreva algo parecido:

 

quero chamar a procedure + ou - assim:

 

minha_procedure (nome de qualquer form);

 

dai na procedure:

 

procedure minha_procedure(const nome_pro_form: string)

 

var

 

form: Tform;

form_classe: Tformclass;

 

begin

 

Aqui o bicho ta pegando, me ajuda aqui por favor ou na procedure inteira:

end;

 

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

procedure CreateForm(Classe: TFormClass);

var

Form: TForm; // isto é somente para omitir uma parametro na xamada da procedure

begin

if (Form = nil) then

begin

Form:= Classe.Create(Application);

Form:= nil;

Form.Free;

end;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.