TopBarMenu()

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

simoreira
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 20 Ago 2004 16:21

TopBarMenu()

Mensagem por simoreira »

Olá!

Estou tentando compilar o meu sistema feito em Clipper 5.2 usando o HMG 3.0.35, seguindo as dicas do fórum (Pablo César). Só que não compila, dá erros de compatibilidade dos FOR...NEXT, pois utilizo quase sempre a mesma letra (FOR x=1 to <Alguma coisa>) e está informando que tem muitos FOR...NEXT com a mesma letra. Eu utilizo a mesma letra sempre depois de fechar a anterior, não é um for...NEXT dentro do outro, mas dá o erro assim mesmo.

Outra coisa que não compila é o uso da função TopBarMenu() que tirei de exemplos da internet mesmo. O que posso fazer para solucionar isso. Atualizando o HMG eu consigo contornar isso?

Abraços.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

TopBarMenu()

Mensagem por Pablo César »

Oi simoreira,

Sem ver o seu código, não tem como ajudar.

Você postou no lugar errado. Existe a seção Minigui para tratar de HMG ou Mnigui Extended.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

TopBarMenu()

Mensagem por Toledo »

simoreira escreveu:Só que não compila, dá erros de compatibilidade dos FOR...NEXT
Estranho isto, se os For... Next não estão um dentro do outro, então não poderia dar algum erro apenas por definir a mesma variável. O problema deve ser outro.
simoreira escreveu:Outra coisa que não compila é o uso da função TopBarMenu() que tirei de exemplos da internet mesmo.
Veja o exemplo abaixo, compilei com o Harbour 3.2 sem problema algum (veja arquivo em anexo).

Código: Selecionar todos

#include "Button.ch"
#include "Inkey.ch"

PROCEDURE Main
   LOCAL oTopBar := CreateMainMenu()

   CLS

   DO WHILE .T.
      MenuModal( oTopBar , 1, ;
                 MaxRow(), 0, MaxCol(), ;
                 oTopBar:colorSpec )
   ENDDO
RETURN


FUNCTION CreateMainMenu()
   LOCAL oMainMenu  := HBTopBarMenu():new( 0, 0, MaxCol() )
   LOCAL bMenuBlock := {|o| MenuSelect(o) }
   LOCAL cMenuColor := "N/BG,W+/R,GR+/BG,GR+/R,N+/BG,N/BG"
   LOCAL aItems

   oMainMenu:colorSpec := cMenuColor
   aItems := { ;
      { " &Teste For...Next "     , K_ALT_T   , "Teste For Next"  , 11 }, ;
      { " &Save "     , K_ALT_S   , "Save routine"  , 12 }, ;
      { MENU_SEPARATOR,           ,                 , 13 }, ;
      { " E&xit "     , K_ALT_X   , "Exit program"  , 14 }  ;
   }

   CreateSubMenu( oMainMenu, " &File ", bMenuBlock, aItems )

   aItems := { ;
      { " Cop&y   "   , K_CTRL_INS, "Copy routine"  , 21 }, ;
      { " &Paste  "   , K_ALT_P  , "Paste routine" , 22 }, ;
      { MENU_SEPARATOR,           ,                 , 23 }, ;
      { " C&ut    "   , K_ALT_U  , "Cut routine"   , 24 }, ;
      { " &Delete "   , K_DEL     , "Delete routine", 25 }  ;
   }

   CreateSubMenu( oMainMenu, " &Edit ", bMenuBlock, aItems )

   aItems := { ;
      { " &Info   "   , K_F1      , "Help routine"  , 31 }, ;
      { " &About  "   ,           , "About program" , 32 }  ;
   }

   CreateSubMenu( oMainMenu, " &Help ", bMenuBlock, aItems )

RETURN oMainMenu


FUNCTION CreateSubMenu( oMenu, cMenuItem, bBlock, aItems )
   LOCAL aItem, oItem, oSubMenu

   oSubMenu           := PopUp():new()
   oSubMenu:colorSpec := oMenu:colorSpec

   FOR EACH aItem IN aItems
      oItem := MenuItem():new( aItem[1], ;
                               bBlock  , ;
                               aItem[2], ;
                               aItem[3], ;
                               aitem[4]  )
      oSubMenu:addItem ( oItem )
   NEXT

   oItem := MenuItem():new( cMenuItem, oSubMenu )
   oMenu:addItem( oItem )
RETURN


PROCEDURE MenuSelect( oMenuItem )
   @ 1, 0 CLEAR TO MaxRow(), MaxCol()

   DO CASE
      CASE oMenuItem:ID=11
         TesteForNext()
      CASE oMenuItem:ID=14
         ExitRoutine()
   OTHERWISE
      Alert( oMenuItem:message )
   ENDCASE
RETURN


PROCEDURE ExitRoutine
   IF Alert( "Exit program?", { "Yes", "No" } ) == 1
      QUIT
   ENDIF
RETURN

PROCEDURE TesteForNext()
   LOCAL nContFor:=0
   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   For x=1 To 10
      nContFor+=1
   Next

   Alert("Contador For Next: "+str(nContFor,4,0))

RETURN
Neste exemplo coloquei uma opção para testar o For... Next, observe que estou usando para todos a mesma variável.

Este exemplo compilei seguindo este tutorial: Migrar Clipper para Harbour

Abraços,
Anexos
demotopbarmenu.zip
(719.69 KiB) Baixado 441 vezes
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
simoreira
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 20 Ago 2004 16:21

TopBarMenu()

Mensagem por simoreira »

Prezado Toledo,

Obrigado pelas informações. Estava tentando usar a HMG sugerida pelo Pablo César, mas vou usar o que foi ensinado no link de migração. Depois posto o resultado.

Abraços!

Sérgio Moreira
simoreira
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 20 Ago 2004 16:21

TopBarMenu()

Mensagem por simoreira »

Toledo,

Eu tentei compilar conforme o que foi postado no link, mas dá o seguinte erro:
Generating C source output to '.hbmk\win\mingw\pgets.c'... Done.
Compiling 'proc1.prg'...
Lines 8357, Functions/Procedures 89
Generating C source output to '.hbmk\win\mingw\proc1.c'... Done.
Compiling 'proc2.prg'...
Lines 7877, Functions/Procedures 59
Generating C source output to '.hbmk\win\mingw\proc2.c'... Done.
Compiling 'proc3.prg'...
Lines 5326, Functions/Procedures 13
Generating C source output to '.hbmk\win\mingw\proc3.c'... Done.
Compiling 'relatori.prg'...
Lines 11753, Functions/Procedures 72
Generating C source output to '.hbmk\win\mingw\relatori.c'... Done.
Compiling 'tbutils.prg'...
Lines 644, Functions/Procedures 6
Generating C source output to '.hbmk\win\mingw\tbutils.c'... Done.
Compiling 'xls.prg'...
Lines 260, Functions/Procedures 7
Generating C source output to '.hbmk\win\mingw\xls.c'... Done.
.hbmk/win/mingw/funcoes.o:funcoes.c:(.data+0x2a08): undefined reference to `HB_F
UN_TOPBARMENU'
collect2: ld returned 1 exit status
hbmk2[conpecwin]: Erro: Executando linkeditor. 1
O que pode estar acontecendo?

Segue aparte do código onde chamo a função, copiado do Help do xHarbour (mas acho que cabe no Harbour, como no seu exemplo):

Código: Selecionar todos


oTopBar := CreateMainMenu()

WHILE True
   MenuModal( oTopBar , 1, ;
              MaxRow(), 0, MaxCol(), ;
              oTopBar:colorSpec )
ENDDO
Depois, a parte que chama a TopBarMenu():

Código: Selecionar todos

/*****
* Function CreateMainMenu()
* createmainmenu.prg
*****/  
FUNCTION CreateMainMenu()
LOCAL oMainMenu  := TopBarMenu():new( 1, 0, MaxCol() )
LOCAL bMenuBlock := {|o| MenuSelect(o) }
LOCAL cMenuColor := "N+/W,W+/N,GR+/W,GR+/N,W+/N,N+/W"
LOCAL aItems

oMainMenu:colorSpec := cMenuColor

aItems := { ;
   { " &Banco de Dados      ", {|| pBcoCria()}   , "Cria um diretório de dados para cada empresa cadastrada"           , 100 }, ;
   { " &Gerais              ", {|| pGerCad()}    , "Cadastra os códigos de fazendas, comentários, categorias, etc."    , 101 }, ;
   { " &Vacas               ", {|| pVentre()}    , "Manutençäo dos dados das vacas (ident, idade, pai, mäe, etc.)"     , 102 }, ;
   { " &Touros              ", {|| pTouro()}     , "Cadastro das informaçöes dos touros (tat, apelido, registro, etc.)", 103 }, ;   
   { " &Reprodução          ", {|| pReprod()}    , "Manutençäo dos dados de reproduçäo (inseminaçäo e monta)"          , 104 }, ;   
   { " &Nascimento          ", {|| pNascimento()}, "Inclusäo do nascimento dos terneiros/bezerros"                     , 105 }, ;   
   { " &Desmame             ", {|| pDesmame()}   , "Cadastro dos dados de desmame dos terneiros/bezerros"              , 106 }, ;   
   { " &Pós-Desmame         ", {|| pPosDesm()}   , "Cadastro dos dados de pós-desmame dos terneiros/bezerros"          , 107 }, ;   
   { " Animais de C&EIP     ", {|| pCeip()}      , "Opçöes para animais que receberäo CEIP"                            , 108 }, ;   
   { " &Ultrassom           ", {|| pUltrasom()}  , "Manutenção dos dados importados de ultrassom"                      , 109 }, ;   
   { " &Ocorrências         ", {|| pOcorrenc()}  , "Cadastro de ocorrências"                                           , 110 }, ;   
   { " R&astreabilidade     ", {|| pRastreab()}  , "Cadastro de informações para a rastreabilidade"                    , 111 }, ;   
   { " &Inclui Pesagens     ", {|| pPesagens()}  , "Cadastro de até 36 pesagens por animal de acordo com seleçäo"      , 112 }, ;   
   { " A&casalamentos - PAD ", {|| pPad()}       , "Programa de Acasalamentos Dirigidos - PAD"                         , 113 }, ;
   { " &Sair                ", {|| Sair()}       , "Sai do Sistema"                                                    , 114 }  ;
}

CreateSubMenu( oMainMenu, " Ca&dastrar ", bMenuBlock, aItems )

aItems := { ;
   { " &Relatórios AVG  ", {|| pConsAvg()} , "Consulta aos relatórios de avaliaçäo genética"         , 200 }, ;
   { " Consulta &Touros ", {|| pConsTou()} , "Consulta nomes e registros de touros em arquivo GenSys", 201 }, ;
   { " &Ficha de Animal ", {|| pOpcFicha()}, "Consulta dados de vacas de produtos"                   , 202 }  ;
}

CreateSubMenu( oMainMenu, " C&onsultar ", bMenuBlock, aItems )

aItems := { ;
   { " &Dados Avaliaçäo  ", {|| pDadosAval()}                    , "Exporta os dados em arquivos para a avaliaçäo genética"       , 300}, ;
   { " &Rastreabilidade  ", {|| pExpImpRast()}                   , "Exporta/Importa dados para a rastreabilidade"                 , 302}, ;
   { " &Importar         ", {|| pImportar()}                     , "Importa dados de arq. ultra-som e avaliaçäo genética"         , 303}, ;
   { " &Transferências   ", {|| pTransfAni()}                    , "Transfere e importa animais de uma fazenda para outra"        , 304}, ;
   { " Imprime &Boletins ", {|| pImprBol(08,47,13,58,'ADV','GC')}, "Imprime boletins gerados pelo exp.dados de avaliaçäo genética",305} ;
}

CreateSubMenu( oMainMenu, " &Exp./Imp. ", bMenuBlock, aItems )

aItems := { ;
          { " &A.N.C. ", {|| pDadosAnc()}, "Emite relatórios para a ANC", 400} ;
          }

CreateSubMenu( oMainMenu, " &Associaçäo ", bMenuBlock, aItems )

aItems := { ;
          { " &Organizar    ", {|| pIndexa()}     , "Organiza os arquivos de índice do sistema", 500},;
          { " Al&tera cores ", {|| pAltCor()}     , "Altera as cores do sistema"               , 501},;
          { " Calcu&ladora  ", {|| fCalculadora()}, "Aciona a calculadora"                     , 502},;
          { " &Impressora   ", {|| pImpressora()} , "Configura a impressora a ser utilizada"   , 503};
          }

CreateSubMenu( oMainMenu, " &Utilitários ", bMenuBlock, aItems )

RETURN oMainMenu

/*****
* Funcition CreateSubMenu()
* createsubmenu.prg
*****/
FUNCTION CreateSubMenu( oMenu, cMenuItem, bBlock, aItems )
LOCAL aItem, oItem, oSubMenu

oSubMenu           := PopUp():new()
oSubMenu:colorSpec := oMenu:colorSpec

FOR EACH aItem IN aItems
   oItem := MenuItem():new( aItem[1], ;
                            aItem[2], ; // bBlock  , ;
                                    , ; // aItem[2], ;
                            aItem[3], ;
                            aitem[4]  )
   oSubMenu:addItem ( oItem )
NEXT

oItem := MenuItem():new( cMenuItem, oSubMenu )
oMenu:addItem( oItem )
RETURN NIL

/*****
* Procedure MenuSelect()
* menuselect.prg
*****/
PROCEDURE MenuSelect( oMenuItem )
@ 1, 0 CLEAR TO MaxRow(), MaxCol()

SWITCH oMenuItem:ID
CASE 114
   ExitRoutine() ; EXIT
   // DEFAULT
   // Alert( oMenuItem:message )
END

RETURN

/*****
*Procedure ExitRoutine()
* exitroutine.prg
*****/
PROCEDURE ExitRoutine
IF Alert( "Exit program?", { "Yes", "No" } ) == 1
   QUIT
ENDIF
RETURN

O que pode estar dando errado?

Abraço!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

TopBarMenu()

Mensagem por Toledo »

simoreira escreveu:O que pode estar acontecendo?
Sérgio, siga o meu exemplo da minha mensagem anterior, troque TopBarMenu por HBTopBarMenu.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
simoreira
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 20 Ago 2004 16:21

TopBarMenu()

Mensagem por simoreira »

Toledo, desculpe, desconsidere a mensagem anterior, encontrei o erro: usei TopBarMenu() em vez de HBTopBarMenu() como fizeste. Troquei e deu certo, compilou correto e abriu o sistema. Precisarei fazer uns ajustes, mas o que eu precisava já consegui! Inclusive um erro que dava no xHarbour já não acontece no Harbour, o que me deixou muito feliz, porque estava incomodado com isso, um problema que não acontecia no programam em Clipper aparecer no xHarbour! Vou explorar mais o Harbour e eliminar alguns problemas da versão Clipper, sendo um deles a questão da impressão em USB.

Muito obrigado pelas informações! E aviso: continuarei explorando os seus conhecimentos e dos demais!

A propósito, onde eu consigo uma documentação do Harbour para saber as funções e qual a sua sintaxe e uso. Eu tirei o exemplo do menu do HELP que baixei do Maligno, se não me engano. Como consigo algo parecido do Harbour?

Abraços e, mais uma vez, obrigado!

Sergio Moreira.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

TopBarMenu()

Mensagem por Fernando queiroz »

Pessoal implementei a mesma rotina e esta funcionando, porem só entra nas opções quando dou ENTER eu queria executar quando clicar no mouse.
alguma dica para fazer isso????
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Responder