Ir para conteúdo

POWERED BY:

Arquivado

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

Wracko

Procedure para criar formulários

Recommended Posts

Olá!

 

Estou procurando um modo de criar uma procedure para carregar os formulários dinamicamente. Ou seja, ao invés de escrever para todos os formulários a mesma coisa:

Application.CreateForm(TFormulario1,Formulario1);   TFormulario1.ShowModal;   TFormulario1.Release;

Eu quero uma procedure que faça isso por mim. Algo como

 

abrirFormulario(TFormulario1);

Por que assim, no futuro eu vou precisar fazer verificações antes de dar o showmodal, e com a procedure ficaria muito mais fácil do que implementar um a um.

 

Seguem minhas tentativas (todas frustradas):

 

 

 

procedure TFMenu.criaform(const FormName : string);var  fc : TFormClass;  f : TForm;begin  fc := TFormClass(FindClass(FormName));  f := fc.Create(Application);  f.ShowModal;  f.Release;     //adaptado de: http://delphi.about.com/library/weekly/aa080905a.htmend;procedure TFMenu.criaform(NomeForm: TForm);//var//	Form: TForm; // isto é somente para omitir uma parametro na xamada da procedurebegin   try  	  //troquei esta linha pela de baixo, também dá erro 	  //TForm(NomeForm).Create(application);	  application.CreateForm(TFormClass(FindClass(TForm(NomeForm).Name)),TForm(NomeForm));	  TForm(NomeForm).ShowModal;   finally	  TForm(NomeForm).Release;   end;end;//adaptado de: http://imasters.com.br/artigo/3832/delphi/resumindo_programacao///abaixo a procedure original:Procedure CriaForm (NomeForm: TFormClass);	Begin   Try	TForm (ClassForm) := ClassForm.Create(self); 	TForm (ClassForm).ShowModal;  Finally	FreeAndNil(ClassForm);  End; // Try   end; // CriaForm

Alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz assim;

if frmCadastro <> nil then

frmCadastro := TfrmCadastro.Create(Application);

frmCadastro.showmodal;

freeandnil(frmCadastro);

 

O FreeAndNil só é chamado quando o frmCadastro é fechado.

 

Se mesmo assim não quiser acima isso:

 

procedure rLoadForm(
		  pFormCham: TForm;
	  var pForm;
	const pComp  : TComponentClass;
	const pCaput : string);
var
  lvInst: TComponent;
  wkStr : string;
  lvInt : integer;
//------------------------------------------------------------------------------
begin
	if (pCaput <> '') then
	   wkStr  := pCaput + '  ' + '(' + plNmLog + ')';
	lvInst := TComponent(pComp.NewInstance);
	TComponent(pForm) := lvInst;
	try
	  lvInst.Create(nil);
	  rLoadImgBtn();
	  if (wkStr <> '') then
		 TForm(pForm).Caption := wkStr;
	  if (pFormCham <> nil) then
		 plInf := TForm(pForm).ClassName;


	  TForm(pForm).ShowModal;
	finally
	  FreeAndNil(TForm(pForm));
	end;
end;
Para usar:

rLoadForm(Self, frmCadastro, TfrmCadastro, 'Pesquisa de horários');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, descobri um jeito.

 

Declarei na public do formulario principal:

procedure criaform(form:TFormClass);

E embaixo do implementation coloquei:

 

procedure TFormulario1.criaform(form:TFormClass);
var ff:TForm;
begin
	  application.CreateForm(form,ff);
	  ff.showmodal;
	  ff.release;
end;

Daí é só chamar criaform(TFormularioClientes);

Lindo que só vendo. Mas teve um detalhe: no onShow do FormularioClientes tinha assim:

FormularioClientes.width:=screen.width;
FormularioClientes.hegth:=screen.heigth-75;

E estava dando erro. Daí eu troquei para:

width:=screen.width;
hegth:=screen.heigth-75;

E funcionou. Fica então o aviso, se alguém usar essa procedure e der erro, tenta desse jeito http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites
class procedure TGUIUtils.CreateModalForm(AForm: TFormClass);
var
  Form : TForm;
begin
  try
    Application.CreateForm(AForm, Form);
    Form.ShowModal;
  finally
    // Finaliza objeto e libera memória:
    Form.Release;
    Form := nil;
  end;
end;

 

Tópico antigo, mas...

 

Eu deixei o meu assim, com base no seu código.

 

Obrigado. :)

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.