Menu com HBTopBarMenu()

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

Menu com HBTopBarMenu()

Mensagem por simoreira »

Prezados,

Estou migrando de Clipper para Harbour. Já consegui alterar algumas coisas que melhoravam o meu sistema na migração, ficou muito bom.

Agora, estou tentando arrumar o funcionamento do menu principal. No meu sistema em Clipper puro, o menu abria sempre na primeira opção (as opções são Cadastrar, Consultar, Exp/Imp, ANC e Utilitários. Todas abrem suas opções de submenu) e, depois de selecionado um item no submenu, ele ficava no item selecionado, aguardando outra seleção. Só que não consigo isso com o HBTopBarMenu(), ele sempre reconstrói todo o menu novamente e eu preciso pressionar <Enter> para selecionar a primeira opção e abrir a popup com os itens daquele menu. Se eu selecionar uma opção ao lado da primeira (Consultar, por exemplo), ele abre o submenu e depois que eu selecionar o que preciso ele refaz tudo e eu tenho que novamente que pressionar <Enter> para abrir a opção "cadastrar", que é a primeira do menu principal.

Tem como eu fazer com que fique selecionado o último menu escolhido e a opção do submenu até que o usuário selecione outra?

O código que uso foi tirado do Help do xHarbour, só adaptei, mas não consegui fazer o que precisava, como descrevi acima. Segue o código.

No programa que chama o Menu Principal:

Código: Selecionar todos

oTopBar := CreateMainMenu()
   
   while True
      MenuModal(oTopBar , 1, ;
                 MaxRow(), 0, MaxCol(), ;
                 oTopBar:colorSpec)
      statbarr()
   enddo	
Funções usadas para montar o menu e os submenus:

Código: Selecionar todos

/*****
* Function CreateMainMenu()
* createmainmenu.prg
*****/  
FUNCTION CreateMainMenu()
LOCAL oMainMenu  := HBTopBarMenu():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("Sair do Programa?", { "Sim", "Nao" }) == 1
   QUIT
ENDIF
RETURN
Grato se alguém tiver uma ideia sobre como implementar o que descrevi.

Abraços.
yugi386
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 24 Jul 2008 10:36
Localização: Minas Gerais

Menu com HBTopBarMenu()

Mensagem por yugi386 »

Bem, não sei se é o que você está buscando mas veja o tópico: https://pctoledo.org/forum/viewto ... 43&t=15281

Faça o download do exemplo de menu: https://pctoledo.org/forum/downlo ... hp?id=1557

Imagem

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

Menu com HBTopBarMenu()

Mensagem por JoséQuintas »

Menu estilo Windows é igual o iniciar do Windows, sempre começa na opção zero.
Só é interessante pra menus bem pequenos.
A opção que conheço é fazer em estilo Clipper mesmo.
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/
simoreira
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 20 Ago 2004 16:21

Menu com HBTopBarMenu()

Mensagem por simoreira »

Obrigado pela ajuda. Vou estudar a função e lhe posto alguma dúvida, se houve.

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

Menu com HBTopBarMenu()

Mensagem por JoséQuintas »

O menu que uso está postado aqui.
Mas é só pesquisar, vai encontrar várias opções aqui no fórum.

https://pctoledo.org/forum/viewto ... 43&t=14790
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/
Responder