ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Criar Form Passando Tipo Como string [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
wagner_teixeira
Novato
Novato


Registrado: Sábado, 2 de Julho de 2011
Mensagens: 44

MensagemEnviada: Seg Jul 30, 2012 6:41 pm    Assunto: Criar Form Passando Tipo Como string [RESOLVIDO] Responder com Citação

Boa Tarde Pessoal,

segue uma pergunta um tanto meio estranha...mas é isso ai mesmo....preciso criar criar um form, mas tenho seu tipo como string, vou explicar melhor.

Estou trabalhando num projeto onde tinha inumeras abas sobrepostas, estamos tirando essas abas e a ideia é colocar um treeview. Criei uma tabela no banco, onde eu tenho os forms e os indices dos forms, por exemplo, o form que fica em Fiscal \ Saidas, seria 5.2...se o usuario clicar no item saidas eu consigo montar a partir do treeview a hierarquia, "5.2", dar um select no banco, pegar o nome do form e criar...seria algo mais ou menos assim....ja tentei algo parecido com isso:
Código:

procedure TM.Button1Click(Sender: TObject);
Var Form:TForm;
begin
  AbreForm(GetClass('TFormPessoal'),Form);

end;

procedure TM.AbreForm(aClasseForm: TComponentClass; aForm: TForm);
begin
   Application.CreateForm(aClasseForm, aForm);
   try
     Aform.Parent := PanelConteudo;
     aForm.Show;
   finally
   end;
end;




se alguem tiver alguma ideia e puder me ajudar nisso...serei grato


Editado pela última vez por wagner_teixeira em Qua Nov 14, 2012 8:01 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Seg Jul 30, 2012 9:45 pm    Assunto: Responder com Citação

Há vários modoo , eu gosto muito de um padrão Factory Method ,

http://forum.devmedia.com.br/viewtopic.php?t=74823&highlight=form+nome

porém vc pode tentar como neste link

http://marcosalles.wordpress.com/2012/04/06/instanciar-objetos-create-objetos-por-strings-pelo-nome-da-classe-passado-por-parametros/

Talves de certo..
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
wagner_teixeira
Novato
Novato


Registrado: Sábado, 2 de Julho de 2011
Mensagens: 44

MensagemEnviada: Seg Jul 30, 2012 11:15 pm    Assunto: Responder com Citação

Fiz um teste aqui em casa, e pelo que vi isso vai me atender.....muito obrigado!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wagner_teixeira
Novato
Novato


Registrado: Sábado, 2 de Julho de 2011
Mensagens: 44

MensagemEnviada: Qua Nov 14, 2012 8:00 am    Assunto: Responder com Citação

só pra finalizar:
na unit do formulario é preciso ter as seguintes instruções:
Código:

initialization
  RegisterClass(TForm1);

finalization
  UnRegisterClass(TForm1);

variaveis:
Código:

ClasseForm : TFormClass;
Form : TForm;

criar o form
Código:

      ClasseForm := TFormClass(GetClass('TForm1'));
      If ClasseForm = nil Then
        Begin
          ShowMessage('Formulário não Registrado!');
          Abort;
        End;
      Application.CreateForm(ClasseForm, Form);

[/code]
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Sáb Nov 17, 2012 12:11 pm    Assunto: Responder com Citação

O Abstract Factory é um Padrão muito forte em suas atribuições

Publiquei um classe que istancia utilizando a String

sem parâmetros

http://marcosalles.wordpress.com/2012/04/06/instanciar-objetos-create-objetos-por-strings-pelo-nome-da-classe-passado-por-parametros/

com parâmetros

http://marcosalles.wordpress.com/2012/11/17/instanciar-objetos-create-objetos-por-strings-pelo-nome-da-classe-passado-por-parametros-parteii/

[]sds
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
wagner_teixeira
Novato
Novato


Registrado: Sábado, 2 de Julho de 2011
Mensagens: 44

MensagemEnviada: Sáb Nov 17, 2012 5:48 pm    Assunto: Responder com Citação

mascossales, do jeito que eu fiz é pior? pode me dar algum problema.... acho que voce esta usando Rtti, mas Rtti só >= delphi 2010.

p.s.: se eu estiver falando alguma bobagem...me desculpe!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcosalles
Moderador
Moderador


Registrado: Quarta-Feira, 26 de Março de 2008
Mensagens: 1695
Localização: Muriaé Mg

MensagemEnviada: Sáb Nov 17, 2012 6:06 pm    Assunto: Responder com Citação

wagner_teixeira escreveu:
mascossales, do jeito que eu fiz é pior? pode me dar algum problema.... acho que voce esta usando Rtti, mas Rtti só >= delphi 2010.

p.s.: se eu estiver falando alguma bobagem...me desculpe!



Eu não diria que é pior eu diria que vc tb obtem o mesmo efeito . As coisas evoluem . O Rtti evoluiu e como vc mesmo disse , a partir do delpho2010 ficou menos engessado . Se vc não tem acesso as classe poderosas do Delphi vc fez do mesmo modo que eu fazia em versões antigas , com a unica diferença que eu prefiro ainda o uso dos Padrões e tb que o Owner do form seje passado como Nil .. algo do tipo

Código:
if form <> nil  then
  exit;
 ClasseForm := TFormClass(GetClass('TForm4'));
      If ClasseForm = nil Then
        Begin
          ShowMessage('Formulário não Registrado!');
          Abort;
        End;
   //   Application.CreateForm(ClasseForm, Form);
       Form:= ClasseForm.Create(nil);
       try
          Form.ShowModal;
       finally
         freeandNil(form);
       end;


[]sds
_________________
http://marcosalles.wordpress.com

Desenvolvo FreeLancer e presto Consultoria
Orientação Online DataSnap DbX ClientDataSet
POO , Padrões de Projeto e dúvidas de Delphi em
Geral
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB