Procedure para abrir um Form
Gostaria a patir de uma String com o nome de um formulário, saber se ele existe. E caso exista dar um Show no mesmo com o programa em modo de execução.
Lembrando: Gostaria de passar para uma Procedure no formato de uma String o nome do formulário que desejo abrir. E a procedure terá que verificar a existência do mesmo e abrir o form dinamicamente.
Se alguém puder ajudar!
[i:d155aa734e][b:d155aa734e]Um forte abraço,
André Ferreira.[/b:d155aa734e][/i:d155aa734e]
Lembrando: Gostaria de passar para uma Procedure no formato de uma String o nome do formulário que desejo abrir. E a procedure terá que verificar a existência do mesmo e abrir o form dinamicamente.
Se alguém puder ajudar!
[i:d155aa734e][b:d155aa734e]Um forte abraço,
André Ferreira.[/b:d155aa734e][/i:d155aa734e]
André Ferreira
Curtidas 0
Respostas
Ehvasc
27/05/2004
Saudações,
Existem dois procedimentos: um é o findwindow, ele te retorna se o form está aberto, a unica bronca é que ele tb funciona em tempo de desenvolvimento, ou seja enquanto vc estiver desenvolvendo seu sistema tem que fechar o form por que senão vai dar sempre como aberto. A outra é freeandnil, mas não sei direito como ela funciona e se funciona pra o que vc precisa. Em ambos os casos dá uma olhada no help do delphi pra ver a sintaxe dos procedimento/funcões. Quanto a criar um form passando uma string vc tem que dá um typecast no momento da passagem do parametro. Algo do tipo
Criaform((var_string) as TForm);
isso deve funcionar
Boa sorte
Eduardo Vasconcelos
ehvasc@hotmail.com
Existem dois procedimentos: um é o findwindow, ele te retorna se o form está aberto, a unica bronca é que ele tb funciona em tempo de desenvolvimento, ou seja enquanto vc estiver desenvolvendo seu sistema tem que fechar o form por que senão vai dar sempre como aberto. A outra é freeandnil, mas não sei direito como ela funciona e se funciona pra o que vc precisa. Em ambos os casos dá uma olhada no help do delphi pra ver a sintaxe dos procedimento/funcões. Quanto a criar um form passando uma string vc tem que dá um typecast no momento da passagem do parametro. Algo do tipo
Criaform((var_string) as TForm);
isso deve funcionar
Boa sorte
Eduardo Vasconcelos
ehvasc@hotmail.com
GOSTEI 0
Rcastro
27/05/2004
ve se este procedimento ajuda...
procedure TDMod.CriaForm(Tformulario: TFormClass; Formulario: TForm);
begin
Try
Application.CreateForm(TFormulario, Formulario);
Formulario.ShowModal;
Finally
Formulario.Release;
End
end;
ele fica armazenado no meu DataModule, que contem outras funcionalidades genericas e chamo este procedimento de qq. outro form, passando os parâmetros.
O form criado é MODAL, e criado em tempo de execução - portando deve estar desabilitado no ´auto-create Forms´ - opções do Projeto.
Espero poder ajudar...
[], Ro
procedure TDMod.CriaForm(Tformulario: TFormClass; Formulario: TForm);
begin
Try
Application.CreateForm(TFormulario, Formulario);
Formulario.ShowModal;
Finally
Formulario.Release;
End
end;
ele fica armazenado no meu DataModule, que contem outras funcionalidades genericas e chamo este procedimento de qq. outro form, passando os parâmetros.
O form criado é MODAL, e criado em tempo de execução - portando deve estar desabilitado no ´auto-create Forms´ - opções do Projeto.
Espero poder ajudar...
[], Ro
GOSTEI 0
Comodelphi
27/05/2004
Isso é Alquimia ou é uma técnica de programação testada?. Eu antes de postar uma solução como esta (TypeCast de String para TForm), ao menos testaria pra ver o que acontece.
Imagina que o colega deva estar fazendo um sistema modularizado ou algo parecido. Eu estou desenvolvendo uma aplicação que guarda no registro do windows o nome da classe, que asssociado a um item de menu é chamado mas estou usando modulos ActiveX, talvez vc possa tentar fazer com dll´s simples.
No meu caso é assim:
Var
NomeDaClasse: String;
procedure Menu1Click(Sender as TObject);
Begin
CreateOleObject(NomeDaClasse); // Vinculação tardia
End;
é mais ou menos isso ai, e funciona!!!
Imagina que o colega deva estar fazendo um sistema modularizado ou algo parecido. Eu estou desenvolvendo uma aplicação que guarda no registro do windows o nome da classe, que asssociado a um item de menu é chamado mas estou usando modulos ActiveX, talvez vc possa tentar fazer com dll´s simples.
No meu caso é assim:
Var
NomeDaClasse: String;
procedure Menu1Click(Sender as TObject);
Begin
CreateOleObject(NomeDaClasse); // Vinculação tardia
End;
é mais ou menos isso ai, e funciona!!!
GOSTEI 0
Xanatos
27/05/2004
Var
FormClass: TformClass;
Form: Tform;
begin
FormClass := TFormClass(GetClass(´TFrCidade´));
Form := FormClass.Create(Application);
Form.Name := ´FrCidade´;
Form.ShowModal;
Form.Free;
end;
e lá em baixo voce coloca:
initialization
RegisterClasses([TFrCidade]);//aqui os nomes dos forms q serao chamados dinamicamente
end.
FormClass: TformClass;
Form: Tform;
begin
FormClass := TFormClass(GetClass(´TFrCidade´));
Form := FormClass.Create(Application);
Form.Name := ´FrCidade´;
Form.ShowModal;
Form.Free;
end;
e lá em baixo voce coloca:
initialization
RegisterClasses([TFrCidade]);//aqui os nomes dos forms q serao chamados dinamicamente
end.
GOSTEI 0