RegisterClasses
01/12/2009
0
Bom dia!
Estou implementando um menu dinâmico, ele já esta pronto e agora estou implementando no sistema da empresa onde trabalho.
Na minha classe que é responsável por criar e montar o menu (TMainMenu) e também um ActionList (TActionList) tenho um método que é vinculado ao evento "OnExecute" das ações adicionadas ao "ActionList", esse Metodo é responsavel pela criação dos formularios o mesmo esta implementado da seguinte forma:
procedure TMenu.DoExecute(Sender: TObject);
var
nForm : string;
fForm : TFormClass;
begin
with FQryAction do
begin
Close;
ParamByName('ID').AsInteger := TAction(Sender).Tag;
Open;
if IsEmpty then Exit;
raise Exception.CreateFmt('Ocorreu erro ao executar ação "%s".',[TAction(Sender).Caption]);
fForm := TFormClass(FindClass(FieldByName('CLASSE').AsString)); **
TFormulario.Criar(fForm, nForm, True);
end;
end;
*** Pega o nome da classe que esta cadastrado no banco de dados.
*** Cria o formulario atraves da classe TFormulario.
- Para isso funcionar corretamente os formularios do projeto foram todos registrados:
initialization
RegisterClasses([TFRM_ConsultaCliente, TFRM_ConsultaFornecedor]);
finalization
UnRegisterClasses([TFRM_ConsultaCliente, TFRM_ConsultaFornecedor]);
Onde mora o problema:
-- Em um projeto de teste tudo isso funcionou muito bem, mais quando colocado no projeto da empresa ao clicar no item do menu o mesmo me dar a seguinte mensagem:
** Class TFConsultaCliente not found.
Fiz varias pesquisa e não achei o que pode ser.
Para dar maior visibilidade do problema, implementei uma lista para me mostrar as classes registradas do projeto nessa lista só aparece classes de componentes ex.: TDataSet, etc... Mas as que eu registrei não aparece.
Existe alguma configuração que pode ser feita no projeto para isso funcionar?
Se alguem tiver uma ideia para resolver esse peoblema, fico grato.
Estou implementando um menu dinâmico, ele já esta pronto e agora estou implementando no sistema da empresa onde trabalho.
Na minha classe que é responsável por criar e montar o menu (TMainMenu) e também um ActionList (TActionList) tenho um método que é vinculado ao evento "OnExecute" das ações adicionadas ao "ActionList", esse Metodo é responsavel pela criação dos formularios o mesmo esta implementado da seguinte forma:
procedure TMenu.DoExecute(Sender: TObject);
var
nForm : string;
fForm : TFormClass;
begin
with FQryAction do
begin
Close;
ParamByName('ID').AsInteger := TAction(Sender).Tag;
Open;
if IsEmpty then Exit;
raise Exception.CreateFmt('Ocorreu erro ao executar ação "%s".',[TAction(Sender).Caption]);
fForm := TFormClass(FindClass(FieldByName('CLASSE').AsString)); **
TFormulario.Criar(fForm, nForm, True);
end;
end;
*** Pega o nome da classe que esta cadastrado no banco de dados.
*** Cria o formulario atraves da classe TFormulario.
- Para isso funcionar corretamente os formularios do projeto foram todos registrados:
initialization
RegisterClasses([TFRM_ConsultaCliente, TFRM_ConsultaFornecedor]);
finalization
UnRegisterClasses([TFRM_ConsultaCliente, TFRM_ConsultaFornecedor]);
Onde mora o problema:
-- Em um projeto de teste tudo isso funcionou muito bem, mais quando colocado no projeto da empresa ao clicar no item do menu o mesmo me dar a seguinte mensagem:
** Class TFConsultaCliente not found.
Fiz varias pesquisa e não achei o que pode ser.
Para dar maior visibilidade do problema, implementei uma lista para me mostrar as classes registradas do projeto nessa lista só aparece classes de componentes ex.: TDataSet, etc... Mas as que eu registrei não aparece.
Existe alguma configuração que pode ser feita no projeto para isso funcionar?
Se alguem tiver uma ideia para resolver esse peoblema, fico grato.
Adriano Sérgio
Curtir tópico
+ 0
Responder
Posts
02/12/2009
Adriano Sérgio
Consegui resolver colocando a seguinte linha no primeiro modulo que carrega na inicialização do sistema.
initialization
RegisterClass(ActivateClassGroup(TPersistentClass(TForm)));
initialization
RegisterClass(ActivateClassGroup(TPersistentClass(TForm)));
Responder
Clique aqui para fazer login e interagir na Comunidade :)