Ir para conteúdo

POWERED BY:

Arquivado

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

Juninho Maia

Criar Formulario em tempo de execucao a partir do nome

Recommended Posts

Olá pessoal, estou com um problema, em uma das minhas aplicacoes estou usando formulario padrão (crio um formulario Form_Padrao_Cadastro = Class(TForm) e varios forms descendentes desse form FCad_Pessoas = Class(TForm_Padrao_Cadastro)), alem de outros formulario de cadastro. Ate ai tudo bem, funciona normalmente, o problema e que pra cada formulario de cadastro eu tenho um formulario de consulta, por exemplo _Pessoas e padrão, FCad_Pessoas e cadastro, FCons_Pessoas e consulta. Dessa forma eu poderia criar um codigo generico pra chamada do formulario, tipo assim:

No evento onshow do form de cadastro eu colocaria o seguinte codigo:

 

onshow do form de cadastro

begin

nome_form_cadastro:=(sender as tform).name; // aki eu tenho o nome do form de cadastro em uma string

nome_form_consulta:='FCons'+copy(nome_form_cadastro,5,length(nome_form_cadastro));// aki eu tenho o nome do form de consulta em uma string

formulario:=(sender as TForm); // aki eu tenho o form de cadastro em uma variavel do tipo :TForm;

formulario_consulta:=TForm(FindGlobalComponent(nome_form_consulta)); // aki eu tenho o form de consulta em uma variavel do tipo :TForm;

end;

 

onclick do botao consultar do form de cadastro

begin

formulario_consulta:=TFormClass(formulario_consulta.ClassType).Create(self);

end;

 

a ideia seria isso, mas da access violation, eu ate entendo que de access violation, pois ta tentando acessar uma propriedade de um formulario q ainda não foi criado na memoria, mas então como eu vou criar o formulario de maneira generica?, sem acessar a classe do formulario, mas referenciando sua classe?

 

Aguardo resposta, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, pelo que eu entendi, você ta querendo fazer os forms de forma dinamica???

 

se for isso tenta assim

 

Form_Teste := TForm.Create(Form1);

Form_Teste.Parente := Form1

 

nota-se que o Form1 é o principal.

 

espero ter ajudado!

 

abraços

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.