Fórum Procedimento que cria Form automaticamente #293359

26/08/2005

0

Olá a todos,

Queria fazer um procedimento generico em que mandava o nome do form e ele criava o form e excutava, ou seja substituia o código abaixo:
   if frConsultaDoc = nil then
        frConsultaDoc:=  TfrConsultaDoc.Create(Application);
       frConsultaDoc.WindowState := wsNormal;
       frConsultaDoc.Show; 


Arranjei este código mas, agora cria adpta-lo podem dar uma ajudinha.

function TfrMain.AddMenu(Pai: TMenuItem; Nome: String; Formulario: String): TMenuItem;
var
 Item: TMenuItem;
 Comando: TMethod;
begin
 Item := TMenuItem.Create(Pai);
 Item.Caption := Nome;

       Comando.Data := Pointer(self);
       Comando.Code := Self.MethodAddress(FiltraAcento(Nome)+´1Click´);
       Item.OnClick := TNotifyEvent(Comando);
       Item.Name    := Formulario;



Porty

Porty

Responder

Posts

26/08/2005

Gatoledo

Se eu entendi bem o que vc quer pode fazer da seguinte maneira:

procedure TForm1.CriaForm(WForm: TForm; AOwner: TComponent;
   WWindowState: TWindowState = wsNormal);
begin
  if Not Assigned(WForm) then
    begin
      WForm := WForm.Create(AOwner);
      WForm.WindowState := WWindowState;
    end
  ;
  WForm.Show;
end;


Para utilizar a função basta chama-la da seguinte maneira:

CriaForm(FoCadastroClientes, Self);

Ou então:

CriaForm(FoCadastroClientes, Self, wsMaximized);


Espero ter ajudado.

Gabriel[/code]


Responder

Gostei + 0

26/08/2005

Porty

Se eu entendi bem o que vc quer pode fazer da seguinte maneira:
procedure TForm1.CriaForm(WForm: TForm; AOwner: TComponent;
   WWindowState: TWindowState = wsNormal);
begin
  if Not Assigned(WForm) then
    begin
      WForm := WForm.Create(AOwner);
      WForm.WindowState := WWindowState;
    end
  ;
  WForm.Show;
end;
Para utilizar a função basta chama-la da seguinte maneira: CriaForm(FoCadastroClientes, Self); Ou então: CriaForm(FoCadastroClientes, Self, wsMaximized); Espero ter ajudado. Gabriel[/code]


Obrigado pela dica, mas eu queria era que o nome do form fosse passado por String, ou seja

CriaForm(´FoCadastroClientes´, Self);


Responder

Gostei + 0

28/08/2005

Luizito

se vc quiser pode usar assim !!!

procedure TForm1.CriaFormulario(Classe: String);
begin
with TForm(FindClass(Classe)).Create(Self) do
try
ShowModal
finally
Free
end;
end;

mas assim vc tem que registrar as classes antes de usar no initialization de cada form!
Se vc quiser passar o nome do formulario é so usar FindComponent(NOME_FORMUARIO) !!!!

Se nao ficou claro é so perguntar de novo !

Abraço !


Responder

Gostei + 0

28/08/2005

Luizito

Errei é assim ! Esqueci do class!!

procedure TForm1.CriaFormulario(Classe: String);
begin
with TFormClass( FindClass(Classe) ).Create(Self) do
try
ShowModal
finally
Free
end;
end;


Responder

Gostei + 0

03/09/2005

Porty

Olá de novo,

A minha aplicação é MDI, como posso registar os Forms, será que não exite alguma coisa mais simple do que estar a registar as classes.
mais ou menos assim:
with TFormClass( FindForm(´frmenus´) ).Create(Self) do
try
ShowModal
finally
Free
end;



Responder

Gostei + 0

03/09/2005

Enigma

Olá de novo, A minha aplicação é MDI, como posso registar os Forms, será que não exite alguma coisa mais simple do que estar a registar as classes. mais ou menos assim:
with TFormClass( FindForm(´frmenus´) ).Create(Self) do
try
ShowModal
finally
Free
end;


Cara usa a função FindComponent:

Application.FindComponent(´frmenus´)



Responder

Gostei + 0

03/09/2005

Porty

O pior é como usei assim mas dá erro:
procedure TFrPrincipal.CriaForm(WForm: TForm; AOwner: TComponent);
var i : integer;
begin
  WForm := TFormClass( Application.FindComponent(´frmenus´)).Create(application);
    WForm.WindowState := wsnormal;
    WForm.Show;

End;

Chamo assim
CriaForm(frmenus , Self);


O problema é acha o TFrmenus para usar pois se forçar o código assim já funciona
procedure TFrPrincipal.CriaForm(WForm: TForm; AOwner: TComponent);
var i : integer;
begin
    WForm := TFrmenus.Create(application);
    WForm.WindowState := wsnormal;
    WForm.Show;



Responder

Gostei + 0

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

Aceitar