Arthur Silvestre Posted October 9, 2013 Report Share Posted October 9, 2013 Bom dia pessoal, tenho uma necessidade que é a seguinte: Quando clicar no menu ele não suma. Uso a classe Tmenu() e como padrão e todos sabemos, sempre que eu clicar em item o menu some a ativa o bAction referente ao menuitem que você definiu. Alguem sabe aonde está o comando para dar um 'hide()' no menu ? por que tudo deve ser programado inclusive isso. Ou alguem teria uma solução para sempre retornar o 'foco' no menuitem em q eu selecionei da ultima vez ? Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted October 9, 2013 Report Share Posted October 9, 2013 Ter como tenho ctz q tem, pois lembro q o Luisão fez isso ake....... deixa eu ver se acho o código dakele Abusado, hauhauua Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted October 9, 2013 Author Report Share Posted October 9, 2013 kkkkkkkk ok, pesquisei e não encontrei nada, até pq tambem é uma 'pesquisa sem titulo'. Pode ser Hide(), Hilite(), End(), etc. Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted October 9, 2013 Report Share Posted October 9, 2013 Testei, acho que até usei, mas não acho nenhuma referencia. **-----------------------------------------------------------------------------**** Finalidade : voltar o menu de onde foi chamado**-----------------------------------------------------------------------------** FUNCTION PCS_VoltaMenu( oM, nNiv ) #include "fivewin.ch" #define KEYEVENTF_KEYUP 2**-----------------------------------------------------------------------------**LOCAL nItem, oLItM, cMov :="", cMv, nChrDEFAULT oM:=WndMain():oMenuDEFAULT nNiv :=0oLItM :=oM:LastItem()FOR nItem :=1 TO Len( oM:aItems ) IF ValType( oM:aItems[nItem]:bAction ) ='O' cMv :=VoltaMenu( oM:aItems[nItem]:bAction, nNiv+1 ) IF Right( cMv,1 ) =="x" cMov += Chr( IF( nNiv =0, VK_DOWN, VK_RIGHT ) )+cMv IF nNiv ==0 cMov :=Left( cMov,Len(cMov)-1 ) keybd_event( VK_MENU,0,0,0) keybd_event( VK_MENU,0,KEYEVENTF_KEYUP,0) FOR nChr :=1 TO Len( cMov ) keybd_event( Asc(SubStr(cMov,nChr,1)),0,0,0 ) keybd_event( Asc(SubStr(cMov,nChr,1)),0,KEYEVENTF_KEYUP,0 ) NEXT RETURN .T. endif RETURN cMov ENDIF ELSE IF oM:aItems[nItem]:nId == oLItM:nId RETURN cMov+"x" ENDIF ENDIF IF !Empt( oM:aItems[nItem]:cPrompt ) // se não for um separador cMov +=Chr( IF( nNiv =0, VK_RIGHT, VK_DOWN ) ) ENDIFNEXTRETURN IF(nNiv ==0, .F., "")*** ************************************************************DLL32 FUNCTION keybd_event(bVk as _INT,bScan as _INT,dwFlags ;as LONG,dwExtraInfo as LONG) AS LONG PASCAL LIB "user32.dll" Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted October 9, 2013 Author Report Share Posted October 9, 2013 Testei, acho que até usei, mas não acho nenhuma referencia. **-----------------------------------------------------------------------------** ** Finalidade : voltar o menu de onde foi chamado **-----------------------------------------------------------------------------** FUNCTION PCS_VoltaMenu( oM, nNiv ) #include "fivewin.ch" #define KEYEVENTF_KEYUP 2 **-----------------------------------------------------------------------------** LOCAL nItem, oLItM, cMov :="", cMv, nChr DEFAULT oM:=WndMain():oMenu DEFAULT nNiv :=0 oLItM :=oM:LastItem() FOR nItem :=1 TO Len( oM:aItems ) IF ValType( oM:aItems[nItem]:bAction ) ='O' cMv :=VoltaMenu( oM:aItems[nItem]:bAction, nNiv+1 ) IF Right( cMv,1 ) =="x" cMov += Chr( IF( nNiv =0, VK_DOWN, VK_RIGHT ) )+cMv IF nNiv ==0 cMov :=Left( cMov,Len(cMov)-1 ) keybd_event( VK_MENU,0,0,0) keybd_event( VK_MENU,0,KEYEVENTF_KEYUP,0) FOR nChr :=1 TO Len( cMov ) keybd_event( Asc(SubStr(cMov,nChr,1)),0,0,0 ) keybd_event( Asc(SubStr(cMov,nChr,1)),0,KEYEVENTF_KEYUP,0 ) NEXT RETURN .T. endif RETURN cMov ENDIF ELSE IF oM:aItems[nItem]:nId == oLItM:nId RETURN cMov+"x" ENDIF ENDIF IF !Empt( oM:aItems[nItem]:cPrompt ) // se não for um separador cMov +=Chr( IF( nNiv =0, VK_RIGHT, VK_DOWN ) ) ENDIF NEXT RETURN IF(nNiv ==0, .F., "") *** ************************************************************ DLL32 FUNCTION keybd_event(bVk as _INT,bScan as _INT,dwFlags ; as LONG,dwExtraInfo as LONG) AS LONG PASCAL LIB "user32.dll" Amigo, esses parametros oM e nNiv são referentes a que objetos ? Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted October 9, 2013 Author Report Share Posted October 9, 2013 Não aconteceu nada. Coloquei a função no action de um menuitem e ela não fez nada. Devo passar o obj do menu pelos parametros ? Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted October 9, 2013 Author Report Share Posted October 9, 2013 onde está essa função 'VoltaMenu' ? Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted October 9, 2013 Report Share Posted October 9, 2013 É isso aí. Aqui o Menu é cadastrável, ou seja, montamos em tempo de execução de acordo com o cadastro dele (leitura em tabela) Ao escolher um programa no MENU, salvamos que programa foi esse depois em um LOOP, é usado os comando de Keybd_event para ir navegando até posicionar onde havia sido clicado antes da chamada do programa a rotina aqui é muito particular pra postar tudo, mas é basicamente isso (difícil até eu entender sem uns debugs) If WX = 1 Keybd_event(18,,0,0) //Foco no menu -- tecla menu Keybd_event( Asc(cLet),,0 ) //Tecla uma letra específica para posicionar no menu Keybd_event(32,,0) //space para "abrir" For WX2 = 1 to nPos Keybd_event(nLado,,0) Keybd_event(32,,0) Next Else nPos:= nBaixo(aAux[WX]) For WX2 = 1 to (nPos-1) Keybd_event(40,,0) //tecla seta para baixo Keybd_event(32,,0) //space para abrir Next If empty(aAux[WX,1]) Keybd_event(39,,0) //tecla seta para direita Keybd_event(32,,0) //space EndIf EndIf Acho que com isso dá pra ter uma ideia que o negócio eh feita usando o teclado via programação ^^ não sei se ajudei ou se confundi mais Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 9, 2013 Report Share Posted October 9, 2013 http://forums.fivetechsupport.com/viewtopic.php?f=2&t=8603&p=40260&hilit=volver+menu#p40260 http://forums.fivetechsupport.com/viewtopic.php?f=6&t=5624&p=24892&hilit=volver+menu#p24892 Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted October 9, 2013 Report Share Posted October 9, 2013 showmenu() de uma olhada nesta rotina... http://fivewin.com.br/index.php?/topic/11886-reabrir-menu-ap%c3%b3s-executar-uma-op%c3%a7%c3%a3o/?hl=showmenu Abraços Luiz Fernando Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted October 9, 2013 Report Share Posted October 9, 2013 showmenu() de uma olhada nesta rotina http://fivewin.com.br/index.php?/topic/11886-reabrir-menu-ap%c3%b3s-executar-uma-op%c3%a7%c3%a3o/?hl=showmenu Abraços Luiz Fernando Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted October 9, 2013 Report Share Posted October 9, 2013 Como disse não tenho nenhuma referencia. Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted October 11, 2013 Author Report Share Posted October 11, 2013 Pessoal, testei isso que vocês indicaram, parece funcionar, mas quando eu dou esses comando é como se ele nao soltasse a tecla entende? Tp, o 'alt' que é a primeira tecla a ser utilizada não solta. Quando eu aperto o alt no meu teclado e solto tudo volta ao normal. Alguem sabe o que é isso ? Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted October 11, 2013 Author Report Share Posted October 11, 2013 Estou usando isso: keybd_event( chr(18),0,0,0) //keybd_event( chr(18),0,0x0002,0) keybd_event( chr(18),0,KEYEVENTF_KEYUP,0) mas quando passa dai, mesmo estando com o KEYEVENTF_KEYUP, o 'alt' continua precionado. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 11, 2013 Report Share Posted October 11, 2013 http://forums.fivetechsupport.com/viewtopic.php?f=3&t=18291&p=95964&hilit=keybd_event#p95964 http://forums.fivetechsupport.com/viewtopic.php?f=6&t=10597&p=51777&hilit=keybd_event#p51777 http://forums.fivetechsupport.com/viewtopic.php?f=6&t=6631&p=29660&hilit=keybd_event#p29660 http://forums.fivetechsupport.com/viewtopic.php?f=20&t=3962&p=17496&hilit=keybd_event#p17496 Quote Link to comment Share on other sites More sharing options...
Arthur Silvestre Posted October 11, 2013 Author Report Share Posted October 11, 2013 N consegui com as dicas joão, alguem sabe o numero das tecls do teclado das setas? tp o esc é 27, mas e as setas? procurei por ascII no google e nao achei. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 11, 2013 Report Share Posted October 11, 2013 #Include "FiveWin.Ch" Function Main() LOCAL oWnd DEFINE WINDOW oWnd TITLE "Testando as Teclas - Caixa Alta e Baixa" oWnd:bKeyDown = { | nKey | MsgInfo( "Caixa Baixa: " + Str( nKey ) ) } oWnd:bKeyChar = { | nKey | MsgInfo( "Caixa Alta.: " + Str( nKey ) ) } ACTIVATE WINDOW oWnd Return Nil Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 11, 2013 Report Share Posted October 11, 2013 Só para deixar documentado, em \SAMPLES\XBRDBU,PRG tem quase todos(ou todos) os ACCELERATOR do five. Show() de bola. Quote Link to comment Share on other sites More sharing options...
kapiaba Posted October 11, 2013 Report Share Posted October 11, 2013 Download para quem não tem five de última geração... http://rapidshare.com/files/2974823279/XBRDBUFD6.ZIP http://forums.fivetechsupport.com/viewtopic.php?f=3&t=25537&p=144765&hilit=xbrdbu#p144765 abs, Quote Link to comment Share on other sites More sharing options...
Erciley Junior Posted October 11, 2013 Report Share Posted October 11, 2013 #INCLUDE 'INKEY.CH' #define K_UP 5 /* Up arrow, Ctrl-E */ #define K_DOWN 24 /* Down arrow, Ctrl-X */ #define K_LEFT 19 /* Left arrow, Ctrl-S */ #define K_RIGHT 4 /* Right arrow, Ctrl-D */ Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.