aokisantos Posted April 15, 2008 Report Share Posted April 15, 2008 O pessoal, nos meus testes aqui, se houver uma MDICHILD aberta o menu se perde, porque abre aquele menu de maximizar minimizar e etc da MDI CHILD. Eu to doido ou é isso mesmo? FWH8.02 PELLES+SQLLIB+MYSQL Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted April 16, 2008 Report Share Posted April 16, 2008 Ao retornar, antes de executar ShowMenu() o foco deve ser dado à window do menu. Assim que eu puder faço uma correção em ShowMenu() para contornar isso. ----------------------------------------------------------- FiveWin 8.02/ Harbour 1.1-1 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted July 18, 2009 Report Share Posted July 18, 2009 Acompanhei este tópico na época, mais só agora fui colocar em pratica, realmente muito bom mesmo a solução do Delair, agora estou tento a seguinte dificuldade ao retornar de minha rotina chamada pelo menu, o sistema executa a linha abaixo se eu tirar ela blz a rotina funciona certo, alguém passou por isto e tem alguma solução. SETKEY( VK_F10, {|| MsgCalc() } ) Obrigado Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 Quote Link to comment Share on other sites More sharing options...
aferra Posted July 18, 2009 Report Share Posted July 18, 2009 Olá Luiz, algumas teclas são utilizadas pelo windows com F1 ( Help ) e F10 ( ABre menu ), então acho que seria melhor vc trocar de tecla. ou fazer alguma manobra para isso, mas aà não sei lhe indicar. Alessandroid=blue> FW20d+CL53b+Blk7+@Say+CDX FW9.02+xHb110+@Say+CDX "O fracasso jamais me surpreenderá, se minha vontade de vencer for suficientemente forte..."id=red> Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted July 18, 2009 Report Share Posted July 18, 2009 citação:Olá Luiz, algumas teclas são utilizadas pelo windows com F1 ( Help ) e F10 ( ABre menu ), então acho que seria melhor vc trocar de tecla. ou fazer alguma manobra para isso, mas aà não sei lhe indicar. Alessandroid=blue> FW20d+CL53b+Blk7+@Say+CDX FW9.02+xHb110+@Say+CDX "O fracasso jamais me surpreenderá, se minha vontade de vencer for suficientemente forte..."id=red> id=quote>id=quote>Vlw Alessandro , era isto mesmo substitui pelo F9 e resolveu o problema... Abraços Luiz Fernando msn: empresoft@globo.com skype:empresoft empresoft@globo.com FWH 8.04,XHARBOUR 1.1,PELES,XDEV,VLIB,ADS 8.1 Quote Link to comment Share on other sites More sharing options...
Kbelo Posted July 19, 2009 Report Share Posted July 19, 2009 Sua Indentação não esta pequena só voce que não usou o <> por []id=red> Aqui voce escreve seu codigo citação:Oi Yuri. Demorei, mas consegui entender o problema. É que Keybd_Envent() processa separadamente os dois eventos: pressionar e soltar a tecla. No teu exemplo você simula estar pressionando e não simula soltar a tecla Alt. Acho que consegui uma solução para o teu caso. Basta chamar a função, a segui, no final de suas rotinas, informando o menu que a chamou e ela se encarrega de reabrir na posição final, sozinha. .#define KEYEVENTF_EXTENDEDKEY 1 .#define KEYEVENTF_KEYUP 2 . .* 1º - Descobre a o caminho até oM:LastItem() .* 2º - Ao sair, simula Alt para abrir o menu e em seguida .* a seqüência de setas para navegar até oM:LastItem() .function ShowMenu( oM, nNiv ) .local nItem, oLItM :=oM:LastItem(), cMov :="", cMv, nChr .* default oM :=GetWndFrame():oMenu .default nNiv :=0 .for nItem :=1 to Len( oM:aItems ) . if ValType( oM:aItems[nItem]:bAction ) ='O' . cMv :=ShowMenu( 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 ) .* MsgInfo( StrTran( StrTran( cMov,Chr(VK_DOWN),"V" ), Chr(VK_RIGHT), ">" ) ) // mostra a sequencia de movimentos. . 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., "") Coloquei os pontos a esquerda para preservar a identação, não sei como de outra forma. Funcionou bem com FWH 8.02. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 id=quote>id=quote> #define KEYEVENTF_EXTENDEDKEY 1 #define KEYEVENTF_KEYUP 2 * 1º - Descobre a o caminho até oM:LastItem() * 2º - Ao sair, simula Alt para abrir o menu e em seguida * a seqüência de setas para navegar até oM:LastItem() function ShowMenu( oM, nNiv ) local nItem, oLItM :=oM:LastItem(), cMov :="", cMv, nChr * default oM :=GetWndFrame():oMenu default nNiv :=0 for nItem :=1 to Len( oM:aItems ) if ValType( oM:aItems[nItem]:bAction ) ='O' cMv :=ShowMenu( 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 ) * MsgInfo( StrTran( StrTran( cMov,Chr(VK_DOWN),"V" ), Chr(VK_RIGHT), ">" ) ) // mostra a sequencia de movimentos. 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., "") id=code>id=code>Marcelo Michels Msn/E-mail:marcelo@infototal.com.br Msn/E-mail:celo.michels@hotmail.com xHarbour 1.1 + Fwh 8.01 + WorkShop + Bcc 5.82 + WvwTools + SQLRDD + xMate. 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.