Clipper On Line • Ver Tópico - menu dinamico vindo de uma tabela

menu dinamico vindo de uma tabela

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

menu dinamico vindo de uma tabela

Mensagempor claudiochaves » 28 Jul 2017 16:07

Pessoal, boa tarde.

Tenho um menu :
   MENU OF oMainWindow
      MENU TITLE "&Ferramentas"
         MENUITEM "Opcao 1"      ID 1001 ACTION Opcao1()
         MENUITEM "Opcao 2"      ID 1002 ACTION Opcao2()
         SEPARATOR
         MENUITEM "Opcao 3"      ID 1003 ACTION Opcao3()
         MENUITEM "Opcao 4"      ID 1004 ACTION Opcao4()
         SEPARATOR    
         MENUITEM "Opcao 5"      ID 1005 ACTION Opcao5()
         MENUITEM "Opcao 6"      ID 1006 ACTION Opcao6()
         MENU TITLE "SubMenu 1"
            MENUITEM "SubMenu 1->Opcao 1"      ID 1007 ACTION Sub1_Opcao1()
            MENUITEM "SubMenu 1->Opcao 2"      ID 1008 ACTION Sub1_Opcao2()
            SEPARATOR    
            MENUITEM "SubMenu 1->Opcao 3"      ID 1009 ACTION Sub1_Opcao3()
            MENUITEM "SubMenu 1->Opcao 4"      ID 1010 ACTION Sub1_Opcao4()
         ENDMENU
         MENU TITLE "SubMenu 2"
            MENUITEM "SubMenu 2->Opcao 1"      ID 1011 ACTION Sub2_Opcao1()
            MENUITEM "SubMenu 2->Opcao 2"      ID 1012 ACTION Sub2_Opcao2()
            SEPARATOR    
            MENUITEM "SubMenu 2->Opcao 3"      ID 1013 ACTION Sub2_Opcao3()
            MENUITEM "SubMenu 2->Opcao 4"      ID 1014 ACTION Sub2_Opcao4()
         ENDMENU
      ENDMENU
   ENDMENU


Gostaria de tornar ele dinâmico, vindo de uma tabela do banco de dados. Pesquisei as funções de criação de menu, mas não consegui . Alguém teria algum exemplo para compartilhar usando a hwgui ?

Obrigado, abraços
Nota de Moderação:
Toledo: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
Claudio Chaves
Desenvolvedor
claudiochaves
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 29
Data de registro: 28 Jul 2017 15:48
Cidade/Estado: campinas/sp
Curtiu: 19 vezes
Mens.Curtidas: 1 vez

menu dinamico vindo de uma tabela

Mensagempor JoséQuintas » 28 Jul 2017 21:56

Ué... acabou de mostrar como é.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

menu dinamico vindo de uma tabela

Mensagempor JoséQuintas » 28 Jul 2017 23:23

#include "windows.ch"
#include "guilib.ch"

PROCEDURE Main

   LOCAL oMainWindow, oMenu

   INIT WINDOW oMainWindow SIZE 800, 500
   oMenu := MenuCria()

   MENU OF oMainWindow

   CriaMenu( oMenu )

   ENDMENU
   ACTIVATE WINDOW oMainWindow

   RETURN

FUNCTION CriaMenu( oMenu )

   LOCAL oElement

   FOR EACH oElement IN oMenu
      IF Len( oElement[ 2 ] ) == 0
         MENUITEM oElement[ 1 ] ACTION Do( oElement[ 3 ] )
      ELSE
         MENU TITLE oElement[ 1 ]
         CriaMenu( oElement[ 2 ] )
         ENDMENU
      ENDIF
   NEXT

   RETURN NIL


hwgui.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

menu dinamico vindo de uma tabela

Mensagempor JoséQuintas » 28 Jul 2017 23:25

O resto é só um único array, o tradicional de menus.
Pelo menos pra mim é tradicional, depois de 30 anos de uso..... rs
Anexos
test.zip
(502.23 KiB) Baixado 146 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

menu dinamico vindo de uma tabela

Mensagempor claudiochaves » 29 Jul 2017 10:00

Ola Quintas, bom dia.

Obrigado pelo exemplo e pelo código, vai me ajudar a iniciar no que eu pretendo.

O que eu vou fazer é transferir as opções de menu que estão no código fonte para uma tabela no banco de dados. Desta forma, vou controlar as permissões de acesso do menu usando a tabela que já tenho. Hoje quando crio uma opção nova, preciso ir no código , acrescentar um item na codificação do menu, ir na tabela de permissão inserir o mesmo item, sempre quis mudar isto e chegou a hora.

Vi que você usa 2 funcoes menudrop e menuundrop para controlar o nivel de menu, a partir disto já tenho ideia de como seguir.

Não sei trabalhar direito ainda com objetos, então a sua função criamenu me elucidou a menu/endmenu que sempre foi aonde eu parava.

Pergunta, o MENUITEM quando colocamos "-' vira SEPARATOR ?

Obrigado novamente, abraços
Claudio Chaves
Desenvolvedor
claudiochaves
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 29
Data de registro: 28 Jul 2017 15:48
Cidade/Estado: campinas/sp
Curtiu: 19 vezes
Mens.Curtidas: 1 vez

menu dinamico vindo de uma tabela

Mensagempor JoséQuintas » 29 Jul 2017 10:27

A parte curiosa é que virou sim.
Fiz isso no Clipper, e na HWGUI acabou também assumindo traço.

Aproveitando:
Meu menu é desse jeito.
O controle de acessos apenas elimina opções do menu.
A configuração de acessos, apenas faz uso desse menu - já postei por aqui o controle de acessos, incluindo usuário/grupo
O help on-line também parte desse menu
E até impressão de manual também parte desse menu
Então, acho que é tudo de bom.... rs

Agora que estou separando em LIB, estou colocando um elemento adicional, só pra "puxar" os fontes.
Add( oMenu, { "nome do menu", "NOMEDOFONTE", { || nomedofonte() } )


O objeto do codeblock é apenas pra garantir que todas as funções foram compiladas.

Sobre a configuração de acessos: (console/gtwvg)

http://www.pctoledo.com.br/forum/viewtopic.php?f=43&t=16321

Nota:
Não estou usando hwgui, só criei a rotina em hwgui ontem por curiosidade.
Inclusive acabei com a allgui, que permitia misturar hwgui+minigui+outras.
Cansei de refazer as mesmas alterações ao atualizar...e já que não uso...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

menu dinamico vindo de uma tabela

Mensagempor JoséQuintas » 29 Jul 2017 11:29

Só a título de curiosidade, partindo do mesmo array em GTWVG.

STATIC FUNCTION MenuWvg( mMenuOpt )

   LOCAL oMenu, nKey // , oImage // , oButton

   oMenu  := wvgSetAppWindow():MenuBar()
   BuildMenu( oMenu, mMenuOpt )
   DO WHILE .T.
      nKey := Inkey( 0 )
      DO CASE
      CASE nKey == HB_K_GOTFOCUS
      CASE nKey == HB_K_LOSTFOCUS
      CASE nKey == K_ESC
         EXIT
      ENDCASE
   ENDDO
   wvgSetAppWindow():oMenu := NIL
   wapi_SetMenu( wapi_GetActiveWindow(), NIL )
   wapi_DestroyMenu( oMenu:hWnd )

   RETURN NIL

FUNCTION BuildMenu( oMenu, acMenu )

   LOCAL oElement, oSubMenu, cbCode, m_ProgTxt
   MEMVAR m_Prog

   FOR EACH oElement IN acMenu
      IF Len( oElement[ 2 ] ) == 0
         m_Prog := oElement[ 3 ]
         IF ValType( m_Prog ) == "C"
            m_ProgTxt := AppEmpresaApelido() + " (" + AppUserName() + ") (" + m_Prog + ") " + Upper( oElement[ 1 ] )
            cbCode     := [{ || RunModule( "] + m_Prog + [", "] + m_ProgTxt + [" ) }]
            oMenu:AddItem( oElement[ 1 ] , &( cbCode ) )
         ELSE
            oMenu:AddItem( oElement[ 1 ], oElement[ 3 ] )
         ENDIF
      ELSE
         oSubMenu := WvgMenu():new( oMenu, , .T. ):Create()
         BuildMenu( oSubMenu, oElement[ 2 ] )
         oMenu:AddItem( oSubMenu, oElement[ 1 ] )

      ENDIF
   NEXT

   RETURN NIL


wvg.png


clipper.png


Ou seja, não importa a LIB, a rotina de criar menu é a mesma.
Só criar a rotina de uso do array em cada LIB.

Acho que nem precisa dizer, a em Harbour/console é a maior de todas.
Mas é a que gosto mais. Dá pra clicar em qualquer posição do menu, seja da frente, de trás, de cima, do lado, etc.

E aproveitando: é aí que entra uma coisa que já comentei: dá pra trabalhar pra LIB gráfica sem mexer na LIB gráfica. Meu menu mesmo é um exemplo, tá pronto pra qualquer LIB.... rs
Até na época do Visual Basic usei algo parecido.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

menu dinamico vindo de uma tabela

Mensagempor claudiochaves » 29 Jul 2017 11:36

Tem muita coisa na hwgui que segue o padrão do clipper, acho que foi feito para auxiliar na migração.
Obrigado novamente e vou estudar o post de usuarios/grupo. Hoje trabalho por usuário , mas vai ser bom implementar grupos.
Claudio Chaves
Desenvolvedor
claudiochaves
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 29
Data de registro: 28 Jul 2017 15:48
Cidade/Estado: campinas/sp
Curtiu: 19 vezes
Mens.Curtidas: 1 vez




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro