Fórum Criar Formulario. #233857

23/05/2004

0

Pessoal.
Preciso criar os formularios da minha aplicação em tempo de execução, só que o nome do formulario esta em uma tabela no meu banco.
O menu da minha aplicação esta sendo criado em função da permissão do usuário que esta logando.
Quando o usuário clicar na opção do menu, eu devo criar o formulário pertencente a opção clicada.
Alguem tem alguma solução?

Grato.
:lol:


Ericfp

Ericfp

Responder

Posts

23/05/2004

Carlosmielke

caro colega

use a funcao FINDCLASS. ela retorna um obejto da classe tpersistentclass.

use desse modo

FINDCLASS(´t´+nome do formulario na tabela);

atenção

para que esta funcao funcione deve-se colocar o seguinte comando na seção INITIALIZATION

registerclass(TFORM1)

crie uma variavel do tipo TForm e use o seguinte comando.

form:=tform(findclass(´t´+nome do formulario na tabela)).create(self)

deve ser assim não lembro bem

espero ter ajudado..

CArlos mielke :)


Responder

Gostei + 0

23/05/2004

Carlosmielke

corrigindo o comando que eu dei acima:

use assim

with TFormClass(FindClass(([b:6d0962c117]´T´+nomeform[/b:6d0962c117])).Create(Self) do
try
ShowModal;
finally
Free;
end;

t+
carlos mielke


Responder

Gostei + 0

24/05/2004

Ericfp

Obrigado Carlos.
Desculpe a minha burrice. Onde fica a INITIALIZATION?

Grato.


Responder

Gostei + 0

24/05/2004

Carlosmielke

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedures
.....
....
....

[b:e7e2935bae]initialization[/b:e7e2935bae]
registerclass(TForm1);
end.


Responder

Gostei + 0

27/05/2004

Guilherme B

Srs !

Fiz exatamento conforme o exemplo apresentado pelo Carlos e continua dando o erro de classe não encontrada.
Não consigo fazer funcionar


Responder

Gostei + 0

28/05/2004

Info.wtomfs

Eu tbm estou com este problema!!!

Alguém pode ajudar ?


Responder

Gostei + 0

28/05/2004

Guilherme B

Acho que conseguiríamos solucionar o problema se tivesse uma maneira de traduzir uma string para TFormClass.

Será possível ?


Responder

Gostei + 0

28/05/2004

Info.wtomfs

Acabei de passar um e-mail para a borland....

Eles tem que resolver daí eu lançarei no Fórum Ok!!!


Responder

Gostei + 0

28/05/2004

Rômulo Barros

Aqui :::

...
[size=18:7fbc1fb2da][color=red:7fbc1fb2da] Uses Classes;[/color:7fbc1fb2da][/size:7fbc1fb2da]
....

procedure TForm1.Button1Click(Sender: TObject);
Var
  Nome : TComponentClass;
  Ref : TForm;
begin
  Nome := TForm2;
  Application.CreateForm(TComponentClass(Nome),Form2);


  // Ou assim

  Application.CreateForm(Nome,Ref);
  Ref.Name := ´MeuForm´;
  Ref.ShowModal; 
end;



Responder

Gostei + 0

28/05/2004

Guilherme B

ESTE ÚLTIMO EXEMPLO TAMBÉM NÃO SE APLICA AO CASO.
O NOME DO FORM É UMA VARIÁVEL .

GRATO


Responder

Gostei + 0

28/05/2004

Info.wtomfs

Exatamente, como eu disse o form é uma string que vêm do banco, que é jogado na variável string da procedure


Procedure CriaForm(NomeForm : Tform);
Begin
NomeForm := TForm.Create(Application);
NomeForm.Show;
End
Else NomeForm.Show;

e na hora de chamar a procedure teria que existir por exemplo

CriarForm( StrToForm(MeuCampodeumaTabelacomnomedoForm.asString));

Entendeu...???

Valeu mesmo assim...


Responder

Gostei + 0

28/05/2004

Xanatos

FormClass: TformClass;
Form: Tform;
begin
// Nome := TForm2;
// Application.CreateForm(TComponentClass(Nome),Form2);

FormClass := TFormClass(GetClass(´TFrCidade´));
Form := FormClass.Create(Application);
Form.Name := ´FrCidade´;
Form.Show;
end;

initialization // Nao esqueca disso
RegisterClasses([TFrCidade]); // Nao esqueca!!!
end.


Responder

Gostei + 0

28/05/2004

Xanatos

ops...vou mandar direito agora:

Var
FormClass: TformClass;
Form: Tform;
begin
FormClass := TFormClass(GetClass(´TFrCidade´));
Form := FormClass.Create(Application);
Form.Name := ´FrCidade´;
Form.ShowModal;
Var
Nome : TComponentClass;
T: TPersistentClass;
Ref : TForm;
FormClass: TformClass;
Form: Tform;
begin
// Nome := TForm2;
// Application.CreateForm(TComponentClass(Nome),Form2);

FormClass := TFormClass(GetClass(´TFrCidade´));
Form := FormClass.Create(Application);
Form.Name := ´FrCidade´;
Form.ShowModal;
Form.Free;
end;

e la embaixo de tudo:

initialization // Deve registrar todos os forms das chamadas!
RegisterClasses([TFrCidade]);

end.

Bom Agora acho que vai!!!


Responder

Gostei + 0

28/05/2004

Xanatos

Que merda! :oops: é só isso:

procedure TFRprincipal.Cidades1Click(Sender: TObject);
Var
FormClass: TformClass;
Form: Tform;
begin
FormClass := TFormClass(GetClass(´TFrCidade´));
Form := FormClass.Create(Application);
Form.Name := ´FrCidade´;
Form.ShowModal;
Form.Free;
end;


initialization
RegisterClasses([TFrCidade, TFrPessoa]);


Responder

Gostei + 0

28/05/2004

Info.wtomfs

Ai em inicialization teria que ser a mesma variável não é...

Como posso passar o parâmetro lá em baixo no inicialization ?

registerclass(?????????);

Pq não sei qual que vou chamar na hora, já que é dinâmico né ???


Tá embaçado né......rsrsrsrsrs

Valeu....


Responder

Gostei + 0

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

Aceitar