Ir para conteúdo
Fórum Script Brasil
  • 0

Criar Um Formulário Dinamicamente


Ricardo_PF

Pergunta

Olá pessoal, o meu problema é o seguinte: estou tentando criar um formulário meio q dinamicamente. Tipo assim, é informado o nome do formulário e a classe a qual ele pertence, por exemplo:

var

frm: Tform;

frmClass: TClass;

Entaum para criar o formulário tentei fazer o seguinte:

- tenho um formulário que se chama frmCliente e ele é da classe TfrmCliente, que por sua vez é herdado de TFormularioModelo (ou seja, o modelo é pai do cliente). Tentei utilizar uma fórmula como a que segue, mas da erro de leitura de memória:

frm := frmCliente;

frmClass := TfrmCliente;

frm := frm.CreateNew(TComponent(frmClass));

Alguém saberia me dizer o q pode estar errado, ou se há alguma outra forma para resolver isso?

Obrigado,

Ricardo.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

não... não tenho como fazer isso porque não tenho a informação TfrmCliente...

quando eu crio um formulário no meu sistema eunaum sei a qual classe de componente ele pertence... a unica coisa q sei é q o nome dele é frmCliente.

Mas consegui resolver da seguinte forma:

//além do q havia feito antes, adicionei as seguintes linhas

frmClass : TComponentClass;

Application.CreateForm(frmClass, frm);

funcionou!

Mas valeu pela força!

Link para o comentário
Compartilhar em outros sites

  • 0

Colega, quando você faz:

frmClass : TComponentClass;
E depois:
frmClass := TfrmCliente;
Application.CreateForm(frmClass, frm);
Nada mais é que:
frm := TfrmCliente.Create(Application); // ou
Application.CreateForm(TfrmCliente, frm);

Ou seja, você está criando um Form que não é pai ou filho de ninguém e seu Owner é o TApplication.

Link para o comentário
Compartilhar em outros sites

  • 0

pois é cara... mas o negocio é q eu não tenho como por frmCliente ou TfrmCliente... eu não tenho o nome do formulário pra manipula...

a dúvidas q eu tinha era exatamente q eu não sabia q tinha q usa um TComponentClass pra referencia o TfrmCliente...

entendeu?... ou seja... fazer Application.CreateForm(TfrmCliente, frmCliente); isso eu já sabia...

Link para o comentário
Compartilhar em outros sites

  • 0

Mas quando você atribui implicitamente: frmClass := TfrmCliente;

você sabe que irá criar um Form da classe TfrmCliente.

Para você criar Forms ou outros objetos sabendo apenas o nome da classe, você tem que registrar essas classes pelo RegisterClass e depois acessá-las pelo nome(string), utilizando GetClass ou FindClass.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...