Yury Posted March 13, 2008 Report Share Posted March 13, 2008 olá pessoal, estou tentando criar alguma rotina que faça a reconstrução do menu e sub-nÃveis após executar a função do action... motivo: muitos clientes reclamando de que após executar uma opção o menu fecha e tem que iniciar do primeiro nÃvel novamente, e para menus complexos, com muitos programas, com sequencias de rotinas encadeadas, fica realmente ruim... estou tentando fazer isto simulando uma sequencia de teclas até atingir o nivel do menu desejado... está de uma forma meio tosca, pois via classe não consegui descobrir nada que pudesse ajudar... peço a gentileza que testem a rotina abaixo e vejam se tem alguma idéia para melhorar, ou alguma outra forma de fazer, novas idéias, etc... a rotina abaixo funciona, porém tem um problema, que é a tecla ALT que fica pressionada, e se der um ESC sai da janela... conto com a ajuda de vocês um abraço segue código abaixo: #include 'FiveWin.ch' //---------------------------------------------------- Function Main() public oWnd, oMenu menu oMenu menuitem '&Clientes' menu menuitem 'Cons&ultas' menu menuitem '&Codigo' ACTION fx('CU') menuitem '&Nome' ACTION fx('CU') menuitem 'Cid&ade' ACTION fx('CU') endmenu menuitem 'Inclusao' ACTION fx('C') menuitem 'Exclusao' ACTION fx('C') endmenu menuitem '&Fornecedores' menu menuitem 'Inclusao' ACTION fx('F') menuitem 'Exclusao' ACTION fx('F') menuitem '&Listagem' menu menuitem '&Codigo' ACTION fx('FL') menuitem '&Nome' ACTION fx('FL') menuitem 'Cid&ade' ACTION fx('FL') endmenu endmenu menuitem '&Produtos' menu menuitem 'Inclusao' ACTION fx('P') menuitem 'Exclusao' ACTION fx('P') menuitem '&Cadastros' menu menuitem '&Codigo' ACTION fx('PC') menuitem '&Descricao' ACTION fx('PC') menuitem '&Grupo' ACTION fx('PC') menuitem '&Tipo' menu menuitem '&Revenda' ACTION fx('PCT') menuitem '&Exportacao' ACTION fx('PCT') menuitem '&Importacao' ACTION fx('PCT') menuitem '&Produzido' ACTION fx('PCT') endmenu endmenu endmenu endmenu DEFINE WINDOW oWnd FROM 0, 0.1 TO 35.6, 100 MDI; COLORS CLR_BLACK,CLR_WHITE; MENU oMenu; TITLE "Reconstrução de Menu após Action" ACTIVATE WINDOW oWnd return //---------------------------------------------------- //---------------------------------------------------- function fx( cNivel ) local nCont := 0 local cLetr := '' local cProg := STRTRAN(oMenu:oLastItem:cPrompt,'&','') msginfo( "Executando '"+cProg + CRLF + CRLF + ; "Ao sair desta opção o menu será reconstruÃdo !!! "+ CRLF + CRLF + ; "Tecle < OK >..." ) for nCont=1 to len(cNivel) cLetr = subst(cNivel,nCont,1) IF nCont=1 keybd_event(VK_MENU,0,0,0) keybd_event( CHR( cLetr ),0,0,0) else keybd_event( CHR( cLetr ),0,0,0) endif next return //---------------------------------------------------- //---------------------------------------------------- DLL32 FUNCTION keybd_event(bVk AS 7 ,; bScan AS 7 ,; dwFlags AS 8,; dwExtraInfo AS 7) ; AS 7 PASCAL LIB "User32.dll" //---------------------------------------------------- id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 14/03/2008 08:23:01 Quote Link to comment Share on other sites More sharing options...
Yury Posted March 13, 2008 Author Report Share Posted March 13, 2008 olá pessoal, estou tentando criar alguma rotina que faça a reconstrução do menu e sub-nÃveis após executar a função do action... motivo: muitos clientes reclamando de que após executar uma opção o menu fecha e tem que iniciar do primeiro nÃvel novamente, e para menus complexos, com muitos programas, com sequencias de rotinas encadeadas, fica realmente ruim... estou tentando fazer isto simulando uma sequencia de teclas até atingir o nivel do menu desejado... está de uma forma meio tosca, pois via classe não consegui descobrir nada que pudesse ajudar... peço a gentileza que testem a rotina abaixo e vejam se tem alguma idéia para melhorar, ou alguma outra forma de fazer, novas idéias, etc... a rotina abaixo funciona, porém tem um problema, que é a tecla ALT que fica pressionada, e se der um ESC sai da janela... conto com a ajuda de vocês um abraço segue código abaixo: #include 'FiveWin.ch' //---------------------------------------------------- Function Main() public oWnd, oMenu menu oMenu menuitem '&Clientes' menu menuitem 'Cons&ultas' menu menuitem '&Codigo' ACTION fx('CU') menuitem '&Nome' ACTION fx('CU') menuitem 'Cid&ade' ACTION fx('CU') endmenu menuitem 'Inclusao' ACTION fx('C') menuitem 'Exclusao' ACTION fx('C') endmenu menuitem '&Fornecedores' menu menuitem 'Inclusao' ACTION fx('F') menuitem 'Exclusao' ACTION fx('F') menuitem '&Listagem' menu menuitem '&Codigo' ACTION fx('FL') menuitem '&Nome' ACTION fx('FL') menuitem 'Cid&ade' ACTION fx('FL') endmenu endmenu menuitem '&Produtos' menu menuitem 'Inclusao' ACTION fx('P') menuitem 'Exclusao' ACTION fx('P') menuitem '&Cadastros' menu menuitem '&Codigo' ACTION fx('PC') menuitem '&Descricao' ACTION fx('PC') menuitem '&Grupo' ACTION fx('PC') menuitem '&Tipo' menu menuitem '&Revenda' ACTION fx('PCT') menuitem '&Exportacao' ACTION fx('PCT') menuitem '&Importacao' ACTION fx('PCT') menuitem '&Produzido' ACTION fx('PCT') endmenu endmenu endmenu endmenu DEFINE WINDOW oWnd FROM 0, 0.1 TO 35.6, 100 MDI; COLORS CLR_BLACK,CLR_WHITE; MENU oMenu; TITLE "Reconstrução de Menu após Action" ACTIVATE WINDOW oWnd return //---------------------------------------------------- //---------------------------------------------------- function fx( cNivel ) local nCont := 0 local cLetr := '' local cProg := STRTRAN(oMenu:oLastItem:cPrompt,'&','') msginfo( "Executando '"+cProg + CRLF + CRLF + ; "Ao sair desta opção o menu será reconstruÃdo !!! "+ CRLF + CRLF + ; "Tecle < OK >..." ) for nCont=1 to len(cNivel) cLetr = subst(cNivel,nCont,1) IF nCont=1 keybd_event(VK_MENU,0,0,0) keybd_event( CHR( cLetr ),0,0,0) else keybd_event( CHR( cLetr ),0,0,0) endif next return //---------------------------------------------------- //---------------------------------------------------- DLL32 FUNCTION keybd_event(bVk AS 7 ,; bScan AS 7 ,; dwFlags AS 8,; dwExtraInfo AS 7) ; AS 7 PASCAL LIB "User32.dll" //---------------------------------------------------- id=code>id=code>Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 14/03/2008 08:23:01 Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 14, 2008 Report Share Posted March 14, 2008 Você se refere a reabrir o menu? Pensei que :GetSubMenu(hPopUp) service para isso. ----------------------------------------------------------- FiveWin 1.92 / Clipper 5.3b / Blinker 7.0 / Workshop / ADS 6.11 Quote Link to comment Share on other sites More sharing options...
aokisantos Posted March 14, 2008 Report Share Posted March 14, 2008 ************************ function atualizamenu() ************************ oMenu:end() //finaliza o obj do menu ... //uma funcao para recostruir o menu ownd:setmenu(omenu) //ativa menu SysRefresh() return(.t.) Espero ter ajudado FWH8.02 PELLES+SQLLIB+MYSQL Quote Link to comment Share on other sites More sharing options...
Yury Posted March 14, 2008 Author Report Share Posted March 14, 2008 citação:Você se refere a reabrir o menu? Pensei que :GetSubMenu(hPopUp) service para isso. id=quote>id=quote>olá Delair, é isto mesmo, reabrir o menu... mas pelo que vi este método não faz isto, ou estou utilizando errado... vc tem alguma rotina/exemplo utilizando o método :GetSubMenu(hPopUp) ? citação:************************ function atualizamenu() ************************ oMenu:end() //finaliza o obj do menu ... //uma funcao para recostruir o menu ownd:setmenu(omenu) //ativa menu SysRefresh() return(.t.) Espero ter ajudado id=quote>id=quote>Obrigado Aoki, mas esta função é para refazer o menu do sistema, oque estou querendo é que que ele reabra de onde parou. Mesmo assim obrigado pela atenção... abraços Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Quote Link to comment Share on other sites More sharing options...
gilmer Posted March 14, 2008 Report Share Posted March 14, 2008 Bom Dia, Não existe nada padrão para fazer isto, inclusive nunca vi nada funcionando no Windows assim, acredito que não tenha como fazer, até hoje não vi nada que permita na API do Windows. e-mail: gilmer@fivewin.com.br msn: fivewinbrasil@hotmail.com Quote Link to comment Share on other sites More sharing options...
Yury Posted March 14, 2008 Author Report Share Posted March 14, 2008 citação:Bom Dia, Não existe nada padrão para fazer isto, inclusive nunca vi nada funcionando no Windows assim, acredito que não tenha como fazer, até hoje não vi nada que permita na API do Windows. e-mail: gilmer@fivewin.com.br msn: fivewinbrasil@hotmail.com id=quote>id=quote>Bom Dia, creio que não exista nada pronto mesmo, nem pela API... mas vc chegou a testar a rotina que eu postei acima ? abraços Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 14, 2008 Report Share Posted March 14, 2008 Esta resposta do Linares, não funcionou? http://fivetechsoft.com/forums/viewtopic.php?t=10301 João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
Yury Posted March 14, 2008 Author Report Share Posted March 14, 2008 citação:Esta resposta do Linares, não funcionou? http://fivetechsoft.com/forums/viewtopic.php?t=10301 João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe id=quote>id=quote>não, isto q ele postou não expande o menu... um abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 14/03/2008 09:48:35 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 14, 2008 Report Share Posted March 14, 2008 citação: citação:Esta resposta do Linares, não funcionou? http://fivetechsoft.com/forums/viewtopic.php?t=10301 João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe id=quote>id=quote>não, isto q ele postou não expande o menu... um abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Editado por - yury on 14/03/2008 09:48:35 id=quote>id=quote>EXPANDE O MENU??? NÃO ENTENDO?? EU ENTENDI, QUE VOCE QUER AO PARTIR DE UM ITEM DO MENU, AO VOLTAR, FOCAR NO MESMO ITEM QUE PARTIU... NÃO É ISSO? OU EU ESTOU LOUCO?? João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe Quote Link to comment Share on other sites More sharing options...
Yury Posted March 14, 2008 Author Report Share Posted March 14, 2008 citação:EXPANDE O MENU??? NÃO ENTENDO?? EU ENTENDI, QUE VOCE QUER AO PARTIR DE UM ITEM DO MENU, AO VOLTAR, FOCAR NO MESMO ITEM QUE PARTIU... NÃO É ISSO? OU EU ESTOU LOUCO?? João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe id=quote>id=quote>1º) vc não está louco, você É louco !!!!! huhuhuhuh 2º) é isto mesmo que vc disse, voltar no nivel do menu de onde chamou o programa, é que eu usei a palavra expande para dizer isto, mas é oq vc falou... abraços Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Quote Link to comment Share on other sites More sharing options...
kapiaba Posted March 14, 2008 Report Share Posted March 14, 2008 citação: citação:EXPANDE O MENU??? NÃO ENTENDO?? EU ENTENDI, QUE VOCE QUER AO PARTIR DE UM ITEM DO MENU, AO VOLTAR, FOCAR NO MESMO ITEM QUE PARTIU... NÃO É ISSO? OU EU ESTOU LOUCO?? João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe id=quote>id=quote>1º) vc não está louco, você É louco !!!!! huhuhuhuh 2º) é isto mesmo que vc disse, voltar no nivel do menu de onde chamou o programa, é que eu usei a palavra expande para dizer isto, mas é oq vc falou... abraços Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say id=quote>id=quote>MEU PIGLIO, EU ACHO QUE VOCE SOMENTE CONSEGUE, SE VOCE CRIAR OBJETOS PARA TODOS OS ITENS DO MENU, DIZER QUE SAO MEMVAR, DISPARAR, E AO VOLTAR, DAR UM XFOCUS( oObeto do Menu ), NOS PARENTESIS DO DISPARO. NÃO TENHO CERTEZA, SOMENTE TENTANDO. OUTRA SAIDA, É CRIAR MENUS VIA CLASSE, MAS AI, É UMA PAULEIRA DO INFERNO. EDNALDO ROLIM, SE NÃO FALHA OS NEURONIOS SUPER PODEROSOS, CONSEGUE FAZER ISSO, MAS EU NÃO TENHO A INELIGENCIA QUE ELE TEM, PARA REPRODUZIR ISTO. OU ENTÃO, APESAR DE FICAR NO MURO, A RESPOSTA DO GILMER, PODE ESTAR CORRETA... MAS EU DUVIDO(hehehehehe). Là VEM O VAGNER WIRTS, PARA DEFENDE-LO. KKKKKKKKKKKKKKKKKK. Abraços. João Santos - São Paulo. kmt_karinha@pop.com.br kapiaba@brfree.com.br Fone: (11) 3106-2832 FWH 2.7 - xHARBOUR 0.99.61 - WorkShop.Exe Editado por - kapiaba on 14/03/2008 12:09:36 Quote Link to comment Share on other sites More sharing options...
joaosolution Posted March 14, 2008 Report Share Posted March 14, 2008 Resolvi de outra forma. Utilizo a classe treeview para opções do sistema e no menu somente itens de configuração. Att João Bosco Clip 5.3b FW 2.6 FWH 2.6 xHarbour 99.1 WorkShop 4.5 Quote Link to comment Share on other sites More sharing options...
Yury Posted March 14, 2008 Author Report Share Posted March 14, 2008 ok, pessoal vou realizar alguns testes e experimentações aqui, obtendo sucesso eu reporto aqui... obrigado pela atenção e ajuda de todos um abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 28, 2008 Report Share Posted March 28, 2008 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 Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 28, 2008 Report Share Posted March 28, 2008 Puts. Usei identação muito pequena. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 Quote Link to comment Share on other sites More sharing options...
Daniel Lopes Filho Posted March 29, 2008 Report Share Posted March 29, 2008 poderia criar um exemplo e postar em dicas ? com o exe junto e os fontes toda informação é bem vinda pra quem esta começando como eu .... valeu ****** xharbour 1.1.0 + gtwvw + dbfcdx fw 8.01+borland resouce workshop/fw pcc USANDO GTWVW + FW JUNTO .... msn..: zazibr@hotmail.com skype: zazibr Daniel lopes Filho Campo Grande/MS Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 30, 2008 Report Share Posted March 30, 2008 É muito sÃmples. Basta chamar ShowMenu( oMenu ), no final da rotina chamada por oMenu. Como faço para postar o exemplo em dicas? #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 elseif oM:aItems[nItem]:nId == oLItM:nId return cMov+"x" 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., "") ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 30, 2008 Report Share Posted March 30, 2008 Como faço para que sejam respeitadas as identações? ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 Quote Link to comment Share on other sites More sharing options...
Daniel Lopes Filho Posted March 30, 2008 Report Share Posted March 30, 2008 boa pergunta como "postar em dicas" manda o exemplo + prg e o exe q disponibilizo um link ate descobrirmos esse mistério "como postar um exemplo em dicas" ****** xharbour 1.1.0 + gtwvw + dbfcdx fw 8.01+borland resouce workshop/fw pcc USANDO GTWVW + FW JUNTO .... msn..: zazibr@hotmail.com skype: zazibr Daniel lopes Filho Campo Grande/MS Quote Link to comment Share on other sites More sharing options...
Yury Posted March 30, 2008 Author Report Share Posted March 30, 2008 obrigado, Delair... vou testar amanhã e depois reporto aqui... a propósito, vc questionou a identação: na janela onde vc digita a mensagem tem os botões na frente de formatar: a cerquinha (#) é para postar código, fica |code| no inicio e |/code| no final: veja a identação correta: if cVar='XXX' if nVar=0 if lVar = .T. msginfo( 'aqui' ) endif endif endif id=code>id=code>um abraço Yury Marcelino Al Viman Sistemas vimansca@vimansca.com.br yury030575@yahoo.com.br (msn) skype: yury.marcelino.al Leme / SP FW 2.6 / [x]Harbour 99.50 / WS / xDev 0.65 / @say Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 31, 2008 Report Share Posted March 31, 2008 Daà fica assim: * 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 elseif oM:aItems[nItem]:nId == oLItM:nId return cMov+"x" 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>Para utilizar basta chamar ShowMenu( oWnd:oMenu ) antes de retornar o foco para oWnd:oMenu. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 Quote Link to comment Share on other sites More sharing options...
qiinfo Posted March 31, 2008 Report Share Posted March 31, 2008 Olá Pessoal, Não entendi muito bem como usar isto. Tentei usar assim e não acontece nada. ... MENUITEM "Minha opcao" MESSAGE "Minha opcao" action TESTE() ... ************** function TESTE ************** MSGSTOP( "TESTE" ) ShowMenu( oWnd:oMenu ) return NIL id=code>id=code>É assim que usa ? Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 31, 2008 Report Share Posted March 31, 2008 citação:Olá Pessoal, Não entendi muito bem como usar isto. Tentei usar assim e não acontece nada. ... MENUITEM "Minha opcao" MESSAGE "Minha opcao" action TESTE() ... ************** function TESTE ************** MSGSTOP( "TESTE" ) ShowMenu( oWnd:oMenu ) return NIL id=code>id=code>É assim que usa ? Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG id=quote>id=quote>Está perfeito desde que sua window principal seja mdi, seu nome seja oWnd e que o menu esteja a ela associado. Estou enviando um exemplo (fonte + executável) para o Daniel Lopes publicar. No exemplo corrigi o default para oMenu. Se não passar ele pegara por defeito o menu da janela principal. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted March 31, 2008 Report Share Posted March 31, 2008 Coreção na definição default de oM. function ShowMenu( oM, nNiv ) local nItem, oLItM, cMov :="", cMv, nChr default oM :=WndMain():oMenu default nNiv :=0 oLItM :=oM:LastItem() . . . ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 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.