Página 1 de 1

TopBarMenu()

Enviado: 11 Ago 2014 15:02
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.

TopBarMenu()

Enviado: 11 Ago 2014 16:06
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.

TopBarMenu()

Enviado: 11 Ago 2014 17:05
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,

TopBarMenu()

Enviado: 12 Ago 2014 09:10
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

TopBarMenu()

Enviado: 13 Ago 2014 14:04
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!

TopBarMenu()

Enviado: 13 Ago 2014 14:12
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,

TopBarMenu()

Enviado: 13 Ago 2014 14:15
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.

TopBarMenu()

Enviado: 05 Dez 2014 10:05
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????