Criação de Forms Dinamicamente

24/08/2023

0

Estou tentando criar uma padronização de criação de formulários no Delphi e gostaria de pedir ajuda para entender como posso criar alguns forms de cadastro a partir de formulários de consulta de uma maneira mais genérica. Vou explicar o que estou tentando fazer e como tenho abordado o problema até agora.

Tenho vários formulários de consulta que herdam da classe Tform_consulta_padrao, e também tenho vários formulários de cadastro que herdam da classe Tform_cadastro_padrao. A ideia é que, ao clicar em um botão "Inserir" no formulário de consulta, e um formulário de cadastro correspondente seja aberto.

Os nomes dos formulários de consulta e os respectivos formulários de cadastro têm um padrão em seus nomes, como "form_consulta_NOME" e "form_cadastro_NOME". Por exemplo, "form_consulta_paises" e "form_cadastro_paises".

A abordagem que tenho tentado é a seguinte:

No evento do botão "Inserir" no formulário de consulta (btn_inserirClick), eu pego o nome do formulário de consulta.
e armazeno em uma variavel. e renomeio ela:

NomeForm := Self.Name;
Delete(NomeForm, 1, Length('form_consulta_'));
NomeForm := 'form_cadastro_' + NomeForm;

gostaria de uma função que eu passe o nome do form e ele crie ele;

ex: CriaForm(NomeForm); -----> Cria o form_cadastro_paises.

Gostaria de saber se alguém já passou por algo semelhante ou se tem alguma ideia de como posso abordar essa situação de maneira mais eficaz e genérica. Agradeço qualquer ajuda ou sugestão que vocês possam fornecer.

Obrigado!

Qualquer código relevante que você já tentou e informações adicionais sobre as classes e os relacionamentos entre os formulários podem ser incluídos aqui.
Guilherme Lima

Guilherme Lima

Responder

Post mais votado

25/08/2023

veja se isto te ajuda:

https://help.market.com.br/delphi/form_-_carregar_a_partir_de_st.htm


Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

25/08/2023

Arthur Heinrich

Uma coisa é criar os arquivos .PAS e .DFM de um formulário, utilizando um modelo que é copiado. Outra coisa é fazer isso e incorporar o formulário ao seu programa, sem a necessidade de compilação.

O que muitos sistemas fazem, ou podem fazer, é parametrizar o seu formulário, utilizando listas de campos, botões e eventos, que são interpretados, dinamicamente, e sua aplicação constrói o formulário, criando cada um dos componentes baseado nas informações.

Imagine que você quer criar um campo (TEdit) no seu Form1, na posição X = 20 e Y = 15, com largura = 80 e altura = 25. Você faria:

var E : TEdit;
...
E:=TEdit.Create(Form1);
E.Left:=20;
E.Top:=15;
E.Width:=80;
E.Height:=25;
E.Parent:=Form1;
E.Visible:=True;

Ao fazer: E:=TEdit.Create(Form1);

O Form1 passa a ser o "owner" do componente TEdit.

Por ser o owner, ao destruir o form com Form1.Free, ele se encarrega de destruir os componentes.

Já a linha: E.Parent:=Form1;

Indica que o componente TEdit deve ser exibido dentro do Form1. Você pode utilizar outros componentes, como um TPanel, para organizar os componentes, por exemplo.

Se você tiver apenas eventos simples, dá para associar a query que deve ser executada ao se pressionar um botão ou coisa do tipo.

Dá um pouco de trabalho, mas funciona.
Responder

28/08/2023

Guilherme Lima

veja se isto te ajuda:

https://help.market.com.br/delphi/form_-_carregar_a_partir_de_st.htm





Isso resolveu o meu problema, mas tem um detalhe...


Teria alguma maneira de registrar essas classes dinamicamente em tempo de execução? pois para funcionar do jeito que está agora é preciso registrar no form_cadastro_padrao todas as classes de cadastro a qual ele irá abrir.


Responder

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

Aceitar