RegisterClasses

01/12/2009

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.

Adriano

Respostas

02/12/2009

Adriano

Consegui resolver colocando a seguinte linha no primeiro modulo que carrega na inicialização do sistema.

initialization
RegisterClass(ActivateClassGroup(TPersistentClass(TForm)));
Responder Citar