Teste de menu com grid

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de menu com grid

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Teste de menu com grid

Mensagem 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

José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Teste de menu com grid

Mensagem 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!!!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Responder