Fórum MainMenu Dinâmico? #290922

05/08/2005

0

Salve galera!

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

Eniorm

Responder

Posts

06/08/2005

Eniorm

(sobe)


Responder

Gostei + 0

06/08/2005

Sistemald

Rapaz, ja vi um sistema assim, que o menu era montato em cima de um arquivo texto, nesse arquivo texto continha o seguinte(eu acho que era o seguinte)
cabeçalho:
Tipo: sera menu principal, ou subtitulo
nome:Nome que devera aparecer
funcao: onde funcao informava qual form abrir


Responder

Gostei + 0

08/08/2005

Eniorm

subindo :(


Responder

Gostei + 0

09/08/2005

Eniorm

sobe


Responder

Gostei + 0

20/08/2005

Eniorm

sobe


Responder

Gostei + 0

27/08/2005

Eniorm

sobe


Responder

Gostei + 0

27/08/2005

Sistemald

Não tentei aqui, mas tenta algo assim

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


Responder

Gostei + 0

09/12/2005

Eniorm

sobe


Responder

Gostei + 0

09/12/2005

Andremuller

Essa idéia é tranquila de implementar. Eu fiz um framework que carrega os módulos e ítens de menu de acordo com o que eu colocar no banco. Pra isso eu exporto sempre a mesma assinaturma de método.
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


Responder

Gostei + 0

03/06/2008

Eniorm

brothers!! hoje estou fazendo testes de modularização com BPL e não mais com dlls (desisti rsrssr) e estou achando muito mais prático trabalhar com os Bpls...

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.


Responder

Gostei + 0

06/06/2008

Eniorm

sobe


Responder

Gostei + 0

06/06/2008

Emerson Nascimento

crie o método OnClick do item:
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;


Responder

Gostei + 0

09/06/2008

Eniorm

Blza Emerson... já consegui ter uma ideia de como eu devo proceder, valeu pela ajuda!


Responder

Gostei + 0

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

Aceitar