Clipper On Line • Ver Tópico - Criar menu

Criar menu

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Criar menu

Mensagempor hazael » 09 Nov 2018 09:02

José, tem razão, o .HBP precisava de uma revisada.
Eu peguei do jeito que veio para mim do fórum, mas interessante é que aqui, funciona do jeito que veio, sem precisar alterar nada, e não apresenta nenhum erro
Talvez a versão do Harbour que estou usando? Uso 3.2:

Harbour 3.2.0dev (r1802131223)
Copyright (c) 1999-2018, https://harbour.github.io/

Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (r1802131223)
Compiler: MinGW GNU C 5.3 (32-bit)
Platform: Windows 10 10.0
PCode version: 0.3
ChangeLog last entry: 2018-02-13 13:23 UTC+0100 Aleksander Czajczynski (hb fki.pl)
ChangeLog ID: d629aa0cad08399fa42c0dbf1df7cbd06486ac38
Built on: Feb 22 2018 04:47:00
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 462
Data de registro: 27 Nov 2016 12:59
Curtiu: 6 vezes
Mens.Curtidas: 31 vezes

Criar menu

Mensagempor JoséQuintas » 09 Nov 2018 09:05

Me chamou a atenção:
Como pode funcionar uma compilação num lugar e em outro não?

Talvez....
o Harbour 3.2 aceite errado, e o 3.4 não.
Mas no 3.4 mostra o que está errado no projeto.

Talvez a ordem das LIBs... não testei invertendo.

Mas não reparei... aqui é CLIPPER.
Não sei se é pra Clipper, ou se a pergunta foi no lugar errado.

Uso o meu desde os tempos do Clipper, mas talvez precise ajuste pra Clipper, e o meu está preso ao meu estilo de programação.

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/jpa_menu.prg

Já testei o mesmo formato de criação de menu para outras LIbs.
Meu menu em ação, nos dois formatos que o aplicativo permite.

menu.png
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9896
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 626 vezes

Criar menu

Mensagempor JoséQuintas » 09 Nov 2018 09:16

Versão miniatura do meu menu:

#include "inkey.ch"

PROCEDURE Main

   LOCAL aMenu, nOpc, nCont, nKey

   aMenu := { ;
      { 1, 5, "primeiro", "prog1" }, ;
      { 2, 5, "segundo", "prog2" }, ;
      { 3, 5, "terceiro", "Prog3" } }
   nOpc := 1

   DO WHILE .T.
      FOR nCont = 1 TO Len( aMenu )
         @ aMenu[ nCont, 1 ], aMenu[ nCont, 2 ] SAY aMenu[ nCont, 3 ] ;
         COLOR iif( nCont == nOpc, "N/W", "W/B" )
      NEXT
      nKey := Inkey(0)
      DO CASE
      CASE nKey == K_ESC; EXIT
      CASE nKey == K_UP;   nOpc := iif( nOpc == 1, Len( aMenu ), nOpc - 1 )
      CASE nKey == K_DOWN; nOpc := iif( nOpc == Len( aMenu ), 1, nOpc + 1 )
      CASE nKey == K_ENTER; Do( aMenu[ nCont, 4 ] )
      ENDCASE
   ENDDO

   RETURN
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9896
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 626 vezes

Criar menu

Mensagempor JoséQuintas » 09 Nov 2018 11:10

E "aperfeiçoando" um pouco.

      CASE nKey == K_ENTER; cTela := SaveScreen(); Do( aMenu[ nCont, 4 ] ); RestScreen( cTela )


Deste jeito não precisa se preocupar com tela, vai sempre voltar ao normal, não importa o que o módulo faça.
Também pode acrescentar um CLOSE DATABASES, assim fecha tudo que o módulo abrir.
Com isso, elimina a necessidade de fazer isso nos módulos.

É esse tipo que coisa que faço no meu menu.
Não parece, mas evita muitos problemas, de esquecer de limpar tela, ou de esquecer de fechar arquivos, desativar filtros, etc.

E como o menu é um array....
Se tiver controle de senhas, é só eliminar elementos do array, e o menu já vai ficar conforme o acesso do usuário.

Isso tudo vale para este menu simples, e pra aquele que postei o endereço, que tem muito mais opções.
Se tudo ficar num array, só alterar o array e o menu já fica alterado.

Só pra lembrar:
não criei o menu completo em um único dia... fui acrescentando recursos com o tempo, conforme as necessidades/idéias iam aparecendo.
Qualquer um pode fazer um menu igual, lógico, criando um simples e acrescentando recursos com o tempo.

é até interessante:
Este trecho SEMPRE vai desenhar todo menu, basta deixar a opção atual em outra cor.

      FOR nCont = 1 TO Len( aMenu )
         @ aMenu[ nCont, 1 ], aMenu[ nCont, 2 ] SAY aMenu[ nCont, 3 ] ;
         COLOR iif( nCont == nOpc, "N/W", "W/B" )
      NEXT


Este trecho vai fazer a movimentação da opção
      CASE nKey == K_UP;   nOpc := iif( nOpc == 1, Len( aMenu ), nOpc - 1 )
      CASE nKey == K_DOWN; nOpc := iif( nOpc == Len( aMenu ), 1, nOpc + 1 )


Se quiser que movimente com setas para os lados, mouse, etc., só acrescentar na movimentação, nem precisa se preocupar com o desenho.

Item importante que muitos usuários esquecem:

Se as rotinas estiverem em uma LIB... alterou a LIB alterou todo aplicativo, ou quantos aplicativos quiser, sem precisar ficar espalhando fontes pelo HD.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9896
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 626 vezes

Criar menu

Mensagempor hazael » 09 Nov 2018 11:20

E como o menu é um array....
Se tiver controle de senhas, é só eliminar elementos do array, e o menu já vai ficar conforme o acesso do usuário.


Como você faz isso na prática? Controla em um arquivo externo? Como habilita/desabilita o usuário para ter ou não ter acesso?
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 462
Data de registro: 27 Nov 2016 12:59
Curtiu: 6 vezes
Mens.Curtidas: 31 vezes

Criar menu

Mensagempor JoséQuintas » 09 Nov 2018 12:34

Por incrível que pareça, todos os fontes estão lá no GitHub, josequintas.

Meu aplicativo é: sefazclass do GitHub, josequintas do GitHub, e mais os módulos que deixei de fora.
Não liberei digitação de pedidos, emissão de nota fiscal, etc., mas procurei deixar funcionando lá no GitHub.

Mas vamos lá:

O menu fica em uma variável array.
Transfiro essa variável pra rotina que compara o NOME do módulo com o arquivo aonde estão gravados os acessos.
Eliminadas as opções sem acesso, elimino as opções do menu que ficaram vazias.
O resultado é um array enxuto.

Nos tempos do VB6 adaptei essa mesma rotina: todos os menus num array, e trabalhar no array.
Só não dava pra mexer pela IDE, porque a IDE do VB6 não permitia array único no menu.
Era limitação da IDE e não do VB6...

Com certeza, muita recursividade encima do array.
Mas tudo pra menu, configurar senhas, etc. estão no github.

Talvez antes de olhar as rotinas, interessante entender o array.

{ "opcao", {}, "modulo", { || modulo() } }

Se uma opção tiver sub-menu, fica num sub-array.
O codeblock é apenas pra forçar a linquedição do módulo, por ele ter virado parte da LIB.
Sem isso, o módulo poderia ficar de fora do EXE, o que me causaria problema.
E com isso, pra compilar o que está no github pode precisar de tapa-buracos. FUNCTION Modulo(); RETURN NIL
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9896
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 626 vezes

Criar menu

Mensagempor lugab » 09 Nov 2018 13:04

Bom dia, povo...

Mestre Quintas, como é q compila esse seu exemplo ? Posta o .HBP pra gente...

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/jpa_menu.prg

Hazael,

Muito bacana o seu exemplo
lugab
lugab
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 795
Data de registro: 19 Mai 2009 15:58
Curtiu: 118 vezes
Mens.Curtidas: 32 vezes

Criar menu

Mensagempor hazael » 09 Nov 2018 13:09

Por incrível que pareça, todos os fontes estão lá no GitHub, josequintas.

Meu aplicativo é: sefazclass do GitHub, josequintas do GitHub, e mais os módulos que deixei de fora.
Não liberei digitação de pedidos, emissão de nota fiscal, etc., mas procurei deixar funcionando lá no GitHub.


Pois é... sabe uma coisa que percebi, depois de muitos anos, é que antigamente eu tinha a impressão que precisava proteger o código fonte a 7 chaves para evitar que alguém se aproveitasse do meu trabalho, mas com o passar do tempo notei que quando alguém disponibilizava um sistema inteiro em Clipper/Harbour, que mesmo assim eu não aproveitava quase nada e na maioria das vezes nem sequer tomava tempo para olhar o código por dentro.
Notei isso também nas vezes que deixei disponível alguma coisa aqui ou ali e vejo que na realidade cada programador gosta de investir em seu próprio código e não tem tanto interesse assim no código alheio, apesar que pensamos que tem gente só esperando uma chance para botar as mãos, mas na prática isso não ocorre.

O que eu concluí é que se deixar o código 100% disponível, que não há risco nenhum, talvez alguém vá usar alguma coisa, isso vai ajudar alguém, mas não vai me prejudicar em nenhuma maneira, vai ao contrário me fazer sentir-me bem que foi útil para alguém.

Acho que se os desenvolvedores deixassem seus códigos disponíveis, aberto, que isso não iria prejudicar ninguém.

Possivelmente teria 1 pessoa em 1.000.000 que teria uma má intenção pessoal de tomar o lugar do desenvolvedor, mas mesmo isso acho improvável.

Faz sentido o que estou dizendo?
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 462
Data de registro: 27 Nov 2016 12:59
Curtiu: 6 vezes
Mens.Curtidas: 31 vezes

Criar menu

Mensagempor JoséQuintas » 09 Nov 2018 14:50

A alternativa viável talvez seja essa de compartilhar parcial.

Qualquer ajuda é ajuda, mesmo se for apenas pra avisar de algo errado.
Muita gente copiar sem ajudar... tudo bem... se alguém ajuda já vale a pena, um pouco de trabalho a menos.

Já pensei se não seria interessante o pessoal do fórum trabalhar junto.
Até pro cliente saber que vai ter continuidade em tudo, e não trocar por causa disso.

Uma vez recebi a proposta de um programador:
Eu abandonar tudo, mudar de cidade e trabalhar em vendas, recebendo comissão, SOMENTE comissão.
Investimento dele nisso: ZERO risco dele nisso: ZERO e com um programador à disposição.
Meu risco: não receber nada.
Isso lá é proposta?
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9896
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 626 vezes

Criar menu

Mensagempor lugab » 09 Nov 2018 15:26

Mestre Quintas, como é q compila esse seu exemplo ? Posta o .HBP pra gente...

https://github.com/JoseQuintas/JoseQuintas/blob/master/source/jpa_menu.prg
lugab
lugab
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 795
Data de registro: 19 Mai 2009 15:58
Curtiu: 118 vezes
Mens.Curtidas: 32 vezes

Criar menu

Mensagempor JoséQuintas » 09 Nov 2018 16:27

lugab escreveu:Mestre Quintas, como é q compila esse seu exemplo ? Posta o .HBP pra gente...


Não venho atualizando, pode precisar tapa-buracos pra módulos novos, mas....

https://github.com/JoseQuintas/JoseQuintas/blob/master/tests/test.hbp

Convém só rodar o teste em pasta separada, porque ele cria arquivos e tudo mais, sempre na pasta atual do EXE.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9896
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 626 vezes

Criar menu

Mensagempor JoséQuintas » 09 Nov 2018 16:37

Testei compilar agora e ok.
Nem tudo que está no menu fica disponível para clientes.
Tem até meu teste de boleto em PDF.

testeboleto.png
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 9896
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 6 vezes
Mens.Curtidas: 626 vezes

Criar menu

Mensagempor hazael » 09 Nov 2018 17:41

O boleto ficou bonito.
Também gosto do esquema de cores, harmonioso.
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 462
Data de registro: 27 Nov 2016 12:59
Curtiu: 6 vezes
Mens.Curtidas: 31 vezes

Criar menu

Mensagempor Ruben Dario » 10 Nov 2018 13:52

Seria posible colocar Iconos a las opciones de ese menu , seria interesante.
Gracias por su aporte
Ruben Dario
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 69
Data de registro: 14 Jun 2015 23:19
Cidade/Estado: Colombia
Curtiu: 3 vezes
Mens.Curtidas: 0 vez

Criar menu

Mensagempor hazael » 12 Nov 2018 14:40

Isso somente é possível em GUI ou usando GTWVG.
Harbour | GTWVT | MingW | Visual Studio Code
Avatar de usuário

hazael
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 462
Data de registro: 27 Nov 2016 12:59
Curtiu: 6 vezes
Mens.Curtidas: 31 vezes

Anterior Próximo



Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Ahrefs [Bot] e 1 visitante


Faça uma doação para o forum
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro