Página 1 de 1

Teste de menu com grid

Enviado: 26 Mai 2024 21:51
por JoséQuintas
Só teste avulso....
tela.png
Do jeito que crio no aplicativo, em array

Código: Selecionar todos

   MenuOption( "Faturamento" )
      MenuDrop()
      MenuOption( "Pedidos/Notas/Manifesto" )
         MenuDrop()
         MenuOption( "Opções NFE/CTE/MDFE" )
            MenuDrop()
            MenuOption( "Preços/Comissões" )
               MenuDrop()
               MenuOption( "Percentuais das tabelas",          "PJPTABPERCENTUAL" )
               MenuOption( "Alteração dos Precos",             "PPRETABELA" )
               MenuOption( "Lista de Preços",                  "PPRERELTABGERAL" )
...
Tela principal, relativamente normal

Código: Selecionar todos

#include "hmg.ch"
#include "i_altsyntax.ch"

STATIC nWindow := 1

PROCEDURE Main

   LOCAL xDlg, cTitle := "test"
   LOCAL aList := MenuCreate()

   SET WINDOW MAIN OFF
   SET WINDOW MODAL PARENT HANDLE ON

   xDlg := NewControl( "W" )

   DEFINE WINDOW ( xDlg ) ;
      AT       0, 0 ;
      WIDTH 1024 ;
      HEIGHT 768 ;
      TITLE cTitle
   END WINDOW
   ON KEY ESCAPE OF (xDlg) ACTION { || DoMethod( xDlg, "RELEASE" ) }

   BrowseMenuBr( xDlg, 0, 0, aList, "MAIN OPTIONS", 0 )
   DoMethod( xDlg, "CENTER" )
   ACTIVATE WINDOW (xDlg)

   RETURN
e o browse recursivo, criando dialog só pra os níveis seguintes.

Código: Selecionar todos

STATIC FUNCTION BrowseMenuBr( xDlg, nRow, nCol, aList, cTitle, nStack )

   LOCAL xBrowse, aBrowseList := {}, aItem, xDlgMenu

   hb_Default( @nRow, 0 )
   hb_Default( @nCol, 0 )
   xBrowse := NewControl( "B" )
   nStack += 1
   FOR EACH aItem IN aList
      AAdd( aBrowseList, { aItem[1] } )
   NEXT
   IF nStack == 1
      xDlgMenu := xDlg
   ELSE
      xDlgMenu := NewControl( "W" )
      DEFINE WINDOW ( xDlgMenu ) ;
         AT nRow, nCol ;
         WIDTH 200 ;
         HEIGHT ( Len( aList ) + 4 ) * 20 ;
         TITLE Upper( cTitle ) ;
         NOSYSMENU ;
         MODAL
      END WINDOW
      ON KEY ESCAPE OF (xDlgMenu) ACTION { || DoMethod( xDlgMenu, "RELEASE" ) }
   ENDIF
   DEFINE GRID ( xBrowse )
      PARENT ( xDlgMenu )
      ROW iif( nStack == 1, 30, 0 )
      COL iif( nStack == 1, 30, 0 )
      WIDTH 200
      HEIGHT ( Len( aList ) + 2 ) * 20
      HEADERS { Upper( cTitle ) }
      WIDTHS { 200 }
      VALUE 1
      ITEMS aBrowseList
      ONDBLCLICK { || Grid_Click( xDlgMenu, xBrowse, GetProperty( xDlgMenu, "ROW" ) + 30, GetProperty( xDlgMenu, "COL" ) + 100, aList, nStack ) }
   END GRID

   IF nStack != 1
      ACTIVATE WINDOW (xDlgMenu)
   ENDIF

   RETURN Nil

STATIC FUNCTION Grid_Click( xDlg, xBrowse, nRow, nCol, aList, nStack )

   LOCAL nValue

   nValue := GetProperty( xDlg, xBrowse, "VALUE" )
   IF Empty( aList[ nValue, 2 ] )
      MsgBox( "Module " + aList[ nValue, 3 ] )
   ELSE
      BrowseMenuBr( xDlg, nRow, nCol, aList[ nValue, 2 ], aList[ nValue, 1 ], nStack )
   ENDIF

   RETURN Nil
Ao invés de mostrar o nome do módulo na tela, era só executar com Do( cModulo ).

Minha configuração de senhas é nesse estilo, só testando uma das possibilidades.
Usei o menu só pra cobaia mesmo.

Tá completo no anexo, fontes e compilado.
Nota: o interessante de teste assim, é que pega problemas em fonte pequeno, o que iria demorar num aplicativo.
Sim, peguei um buguizinho sim na definição de teclas, mas desse jeito funcionou.
test.zip
(1.29 MiB) Baixado 167 vezes

Teste de menu com grid

Enviado: 05 Jun 2024 20:52
por JoséQuintas
Versão final DO TESTE, no estilo da minha configuração de acessos.
Mostrando se é acesso total ou parcial de cada opção.
Lembrando: tá tudo num único array
Na minha atual não mostra isso de parcial.....

Sei lá... nada demais... é só o que eu já tinha pronto e deu certo fazer igual em gui.
Só não deve ser normal pra quem usa IDE... fazer o que...
Deixar bonito ainda não é a prioridade, vejo depois, se usar.

https://www.youtube.com/watch?v=LPhErcVUbJg


Teste de menu com grid

Enviado: 08 Nov 2024 14:26
por microvolution
JoséQuintas escreveu:Versão final DO TESTE, no estilo da minha configuração de acessos.
Mostrando se é acesso total ou parcial de cada opção.
Lembrando: tá tudo num único array
Na minha atual não mostra isso de parcial.....

Sei lá... nada demais... é só o que eu já tinha pronto e deu certo fazer igual em gui.
Só não deve ser normal pra quem usa IDE... fazer o que...
Deixar bonito ainda não é a prioridade, vejo depois, se usar.

https://www.youtube.com/watch?v=LPhErcVUbJg

Parabéns meu nobre JQuintas!
Você como sempre, sempre inovando e explorando "os impossíveis" da linguagem-mãe!

#gratidão
#sempre!!!