Fórum Formulario por string #373152
05/08/2009
0
procedure TFrmPrincipal.ChamaFormPelaString(const vNomedoForm: string);
Var
vFc : TFormClass;
vF : TForm;
vTipoFormulario : String;
begin
//
vTipoFormulario := Copy( Trim( vNomedoForm ), 0, 7 );
vFc := TFormClass(FindClass( vNomedoForm ));
{ * Verifica o Tipo do Formulário para uma abertura diferenciada * }
{ * Rotina para Formulários de Cadastro * }
if vTipoFormulario = ´TFrmCad´ then
begin
if not JanelaAberta( vFc.ClassName ) then
begin
vF := vFc.Create( Self );
end;
end
else
begin
{ * abre formulários que não tenham construtor e só dependam do create* }
vF := vFc.Create(Application);
vF := Create( Self );
end;
end;Orc
Curtir tópico
+ 0Posts
05/08/2009
Osocram
dentro do metodo vc inicia assim
begin
inherited create(aowner); <--- aqui vc força mesmo não sendo um override usar herança do metodo create;
//tudo q vc precisa aqui....
end;
---------------------------------------
No seu metodo generico vc vai ter q fazer um cast p ele reconhecer este metodo.
Gostei + 0
05/08/2009
Orc
Gostei + 0
05/08/2009
Osocram
Em qual classe que vc criou esse constructor?
por exemplo
if not JanelaAberta( vFc.ClassName ) then
begin
vF := vFc.Create( Self );
Teria que ser algo parecido com isso
if not JanelaAberta( vFc.ClassName ) then
begin
vF := TSeuFormComNovoCreate(vFc).Create( Self,outroParametro );
Gostei + 0
05/08/2009
Diegotiemann
public { Public declarations }
constructor Create(aOwner :TComponent; seuParam:TSeuTipo);override;Note que você precisa sobreescrever o construtor usando override.
O Método fica assim:
constructor TSeuForm.Create(aOwner: TComponent; seuParam: TSeuTipo); begin inherited Create(aOwner); //aqui você faz o que quer com seu parâmetros end;
Gostei + 0
05/08/2009
Orc
public { Public declarations }
constructor Create(aOwner :TComponent; seuParam:TSeuTipo);override;constructor TSeuForm.Create(aOwner: TComponent; seuParam: TSeuTipo); begin inherited Create(aOwner); //aqui você faz o que quer com seu parâmetros end;
Gostei + 0
05/08/2009
Diegotiemann
Gostei + 0
06/08/2009
Emerson Nascimento
procedure TFrmPrincipal.ChamaFormPelaString(const vNomedoForm: string);
Var
vFc : TFormClass;
vF : TForm;
vTipoFormulario : String;
begin
//
vTipoFormulario := Copy( Trim( vNomedoForm ), 0, 7 );
vFc := TFormClass(FindClass( vNomedoForm ));
{ * Verifica o Tipo do Formulário para uma abertura diferenciada * }
{ * Rotina para Formulários de Cadastro * }
if (vTipoFormulario = ´TFrmCad´) and not JanelaAberta(vFc.ClassName) then
vF := TClassePai(vFc).Create( Self, [demais parametros] )
else
{ * abre formulários que não tenham construtor e só dependam do create* }
vF := vFc.Create(Self);
end;onde [i:4d25476044]TClassePai[/i:4d25476044] deve ser substituído pela classe da qual os forms de cadastro são herdeiros.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)