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.
Adriano Sérgio

Adriano Sérgio

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)));
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar