Fórum MainMenu Dinâmico? #290922
05/08/2005
0
Estive pensando, num sistema meu que quero montar dividindo os módulos em [b:ad31d754bb]DLLs [/b:ad31d754bb]separadas.
Dae, no caso eu pensei em controlar os modulos pelo banco de dados. Onde teria uma tabela com o nome da dll, nome do menu-pai, e procedimento a ser executado, ex:
[b:ad31d754bb]dll:[/b:ad31d754bb][i:ad31d754bb]arquivo.dll[/i:ad31d754bb]
[b:ad31d754bb]menupai:[/b:ad31d754bb][i:ad31d754bb]relatorios[/i:ad31d754bb]
[b:ad31d754bb]itemdemenu:[/b:ad31d754bb][i:ad31d754bb]Relatório de &Clientes[/i:ad31d754bb]
[b:ad31d754bb]procedimento:[/b:ad31d754bb][i:ad31d754bb]rel_clientes[/i:ad31d754bb]
Supondo que na dll exista um procedimento chamado [b:ad31d754bb]rel_clientes[/b:ad31d754bb] que cuida de montar o relatório.
Isso teria que ser acrescentado no menu RELATÓRIOS, criando um item cujo caption seria ´Relatório de [u:ad31d754bb]C[/u:ad31d754bb]lientes´ e que, qdo clicado executasse o procedimento [b:ad31d754bb]rel_clientes[/b:ad31d754bb]
Dessa forma, eu poderia habilitar/desabilitar ou até mesmo incluir novos opções e módulos ao meu sistema sem ter que recompilar todo o projeto.
Não sei se essa idéia é viagem, mas será que algúem tem alguma dica ou algo a esclarecer??
Outra coisa que fiquei pensando!!! Criar um item de menu em runtime seria fácil, mas dai como relacionar o evento [b:ad31d754bb]OnClick[/b:ad31d754bb] desse item com um procedimento (da dll), sendo que no banco o nome do procedimento estaria gravado na forma de string(varchar);.
Falow galera!
Eniorm
Curtir tópico
+ 0Posts
06/08/2005
Eniorm
Gostei + 0
06/08/2005
Sistemald
cabeçalho:
Tipo: sera menu principal, ou subtitulo
nome:Nome que devera aparecer
funcao: onde funcao informava qual form abrir
Gostei + 0
08/08/2005
Eniorm
Gostei + 0
09/08/2005
Eniorm
Gostei + 0
20/08/2005
Eniorm
Gostei + 0
27/08/2005
Eniorm
Gostei + 0
27/08/2005
Sistemald
guarde em um arquivo .ini os menus quais deverá aparecer
Tipo assim:
Tipo*Nome$menupai|Procedimento
M*CLiente$null|frmcliente
ao ler esta linha você deverá verificar a primeira letra
ao ler a primeira letra você saberá que é um menu principal
a segunda parte que vai do ´*´ até ´$´ é titulo.
a terceira parte só precisa le se for submenu.
a quarta parte é procediemnto nele contem o formulario que deverá ser aberto. use algo do tipo abaixo:
for i := 0 to application.ComponentCount - 1 do begin if application.Components[i] is TForm then begin if (application.Components[i] as Tform).name = nomeprocurado then (application.Components[i] as Tform).show; end; end;
espero ter ajudado
Gostei + 0
09/12/2005
Eniorm
Gostei + 0
09/12/2005
Andremuller
Você poderia, por exemplo, setar como Tag de cada ítem um código único onde tu tem na base qual dll executar, aí setar o OnClick pra disparar o mesmo evento para todos ítens, pegar pela Tag qual a dll a chamar e executar o método padrão para aquele módulo
Gostei + 0
03/06/2008
Eniorm
a dúvida quanto ao MainMenu Dinâmico persiste, supondo que na minha [b:38d84186e8]tabela [/b:38d84186e8]eu teria algo do tipo:
ModuloBpl: ´clientes.bpl´ Metodo: ´abrecadastroclientes´ Caption: ´&Cadastro Clientes´;
* todos varchar(string)
Onde [b:38d84186e8]´clientes.bpl´[/b:38d84186e8] seria o módulo a ser usado
Caption seria o [b:38d84186e8]Caption [/b:38d84186e8]a ser exibido no TMenuItem filho que será incluído no MainMenu
O método [b:38d84186e8]´abrecadastroclientes´[/b:38d84186e8] é o nome do procedimento [b:38d84186e8]exportado [/b:38d84186e8]de dentro do meu módulo que abre o form de cadastro.
a dúvida que fica é: como eu vou associar o método exportado ao evento OnClick do meu TMenuItem filho?
O compilador diz que MeuItem.OnClick deve receber um tal de [b:38d84186e8]TNotifyEvent[/b:38d84186e8]
abraços.
Gostei + 0
06/06/2008
Eniorm
Gostei + 0
06/06/2008
Emerson Nascimento
procedure TForm1.ItemMenuClick(Sender: TObject); var modulo: Hmodule; proc: procedure; begin // posiciona no registro TabelaMenu.Recno := TComponent(Sender).Tag; // agora você atribui à proc o procedimento apontado no registro modulo := LoadPackage(TabelaMenuModulo.AsString); @proc := GetProcAddress(modulo, TabelaMenuMetodo.AsString); proc; end;
ao criar os itens de menu, os associe ao evento criado e ao registro da ´tabela´ de menu (use o tag ou alguma outra propriedade).
NovoItem.Tag := TabelaMenu.Recno;
NovoItem.OnClick := ItemMenuClick;
Gostei + 0
09/06/2008
Eniorm
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)