rotina genérica para criação de Forms em tpo. de execução

Delphi

13/05/2004

//unit sem form - criada para armazenam,ento das rotinas genéricas utilitarios do prg.
Por favor, vendo os comentarios abaixo, me ajudem (quem souber e quiser) a montar uma rotina genérica e publica para criação dinâmica de Forms...
neste mesmo contexto, se der certpo vou criar uma generica para liberar um form...

VEJA ABAIXO :
A rotina deve ser chamada do Form principal (ou outro) apenas fazendo-se referencia:

UUtil.CriaForm(nome_do_formulario);
mas
não consigo compilar porque o tipo definido para o parametro não e aceito.

unit UUtil;

interface
//declarei aqui o cabeçalho da procedure mas não sei se é certo !???
procedure CriaForm(form1: TForm);

implementation
// procedure para criação dos forms recebendo por parâmetro onome do form...
procedure CriaForm(form1: TForm);

Begin
//testa se o Form existe...
if form1 = nil then
begin
try
Application.CreateForm(Tform1, form1);
form1.showModal;
finally
form1.Release;
//não sei se o nil libera a memoria ...ou uso o destroy??
form1 := nil;
end;
end;
End;
end.


Rcastro

Rcastro

Curtidas 0

Respostas

Fer_nanda

Fer_nanda

13/05/2004

dah uma olhada nesse tópico
http://delphiforum.icft.com.br/forum/viewtopic.php?t=43084&highlight=criar+form


GOSTEI 0
Cabelo

Cabelo

13/05/2004

Cara Colega

Na seção uses da UNIT UUtils, está declarado a unit FORMS, se não estiver coloque e compile e vê se dá certo, no caso de testar o form, use assim

if not assigned(form1) then
begin
try
form1 := TForm.Create(application);
form1.showmodal;
end
else
begin
messagedlg(´Este form já existe!´, mterror, [mbOk], 0);
end;
finally
form1.Release;


espero ter ajudado, qualquer outra dúvida me mande um e-mail para cabelo.uni@uol.com.br

//quando vc dá um release vc já libeoru a memória..


GOSTEI 0
Rômulo Barros

Rômulo Barros

13/05/2004

caro amigo rcastro.. Já passei pelo que vc está passando agora e consegui criar uma rotina genérica para criação de Forms em RunTime.
Segue:

[size=18:592e472dc5]OBS: Não esqueça de mandar usar a biblioteca Clases [color=red:592e472dc5](Uses Classes);[/color:592e472dc5][/size:592e472dc5]

procedure TUnitFuncoes.ChamarTela(parForm: Tform;
  parInstance: TComponentClass; parMsg: String);
begin
   Application.CreateForm(parInstance,parForm);
   parForm.Caption := parMsg;
   Try
     parForm.ShowModal;
   Finally
     parForm.Release;
     parForm := Nil;
   End;
end;


Exemplo: (Vamos supor que temos um formulário chamado FormCadCliente), então:

  ChamarTela(FormCadCliente,TFormCadCliente);



GOSTEI 0
Rcastro

Rcastro

13/05/2004

O código abaixo não é mérito meu mas do mestre Laercio, a quem a gradeço.
O exemplo apenas complementa a contribuição legal dos colegas deforum...
grata.

procedure TFrmDM.CriaFormulario(TFormulario: TFormClass;
Formulario: TForm);
begin
Try
Application.CreateForm(TFormulario, Formulario);
Formulario.ShowModal;
Finally
Formulario.Free;
End

end;


GOSTEI 0
Rômulo Barros

Rômulo Barros

13/05/2004

O código abaixo não é mérito meu mas do mestre Laercio, a quem a gradeço. O exemplo apenas complementa a contribuição legal dos colegas deforum... grata. procedure TFrmDM.CriaFormulario(TFormulario: TFormClass; Formulario: TForm); begin Try Application.CreateForm(TFormulario, Formulario); Formulario.ShowModal; Finally Formulario.Free; End end;


Engraçado !! Sobe


GOSTEI 0
POSTAR