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...
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...
qiinfo Posted April 3, 2008 Report Share Posted April 3, 2008 Olá Delair, Não estou conseguindo rodar o programa abaixo. Tem como você testar ele aà e me falar ? #include "FiveWin.ch" static oWnd //----------------------------------------------------------------------------// function Main() SET _3DLOOK ON DEFINE WINDOW oWnd FROM 1, 1 TO 22, 75 ; TITLE "Test Menu" MENU BuildMenu() ; MDI SET MESSAGE OF oWnd TO FWVERSION CLOCK DATE KEYBOARD NOINSET ACTIVATE WINDOW ownd MAXIMIZED RETURN NIL //----------------------------------------------------------------------------// function BuildMenu() local oMenu MENU oMenu MENUITEM "Item 1" MENU MENUITEM "Item 1 - Sub 1" MESSAGE "Item 1 - Sub 1" ; ACTION MsgInfo( "any action" ) ; ACCELERATOR 0, VK_F2 MENUITEM "Item 1 - Sub 2" MESSAGE "Item 1 - Sub 2" ENDMENU MENUITEM "Item 2" MENU MENUITEM "Item 2 - Sub 1" MESSAGE "Item 2 - Sub 1" MENUITEM "Item 2 - Sub 2" MESSAGE "Item 2 - Sub 2" MENUITEM "Minha opcao" MESSAGE "Minha opcao" action TESTE() ENDMENU MENUITEM "Short" MENU MENUITEM "abcd" MESSAGE "dd" ENDMENU MENUITEM "Shorter" MENU MENUITEM "ab" MESSAGE "dd" ENDMENU MENUITEM "&Exit" ENDMENU return oMenu ************** function TESTE ************** MSGSTOP( "TESTE" ) ShowMenu( oWnd:oMenu ) return NIL * Para utilizar basta chamar ShowMenu( oWnd:oMenu ) antes de retornar o foco para oWnd:oMenu. * 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() #define KEYEVENTF_KEYUP 0x0002 ***************** function ShowMenu( oM, nNiv ) ***************** local nItem, oLItM, cMov :="", cMv, nChr default oM :=WndMain():oMenu default nNiv :=0 oLItM :=oM:LastItem() *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., "") 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>Outra coisa. Quando executo o prgrama acima e sem seguida encerro ele, o teclado fica maluco. Se abro uma janela MS-DOS e digito: EXIT e enter , em vez de fechar a janela, ela é minimizada, doideira hehe 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 April 4, 2008 Report Share Posted April 4, 2008 citação:Olá Delair, Não estou conseguindo rodar o programa abaixo. Tem como você testar ele aà e me falar ? Outra coisa. Quando executo o prgrama acima e sem seguida encerro ele, o teclado fica maluco. Se abro uma janela MS-DOS e digito: EXIT e enter , em vez de fechar a janela, ela é minimizada, doideira hehe Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG id=quote>id=quote>Oi Rossine! Você está usando Clipper ou xHarbour? É que não consegui fazer funcionar "keybd_event( Asc(SubStr(cMov,nChr,1)),0,KEYEVENTF_KEYUP,0 )" no Clipper, daà fica simulando a tecla como pressionada. Deste modo, é interpretado como - e comuta entre janela e tela cheia. Não consegui localizar teu cadastro, para te enviar um exemplo por e-mail. Enviei o exemplo para o Daniel Lopes publicar, mas não sei no que deu. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.11 Quote Link to comment Share on other sites More sharing options...
qiinfo Posted April 4, 2008 Report Share Posted April 4, 2008 Olá Delair, Eu uso xharbour. Meu email é: qiinfo@ig.com.br 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 April 4, 2008 Report Share Posted April 4, 2008 citação:Olá Delair, Eu uso xharbour. Meu email é: qiinfo@ig.com.br Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG id=quote>id=quote>Já foi... ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
qiinfo Posted April 4, 2008 Report Share Posted April 4, 2008 Olá Delair, Não chegou aqui não. Envie novamente por favor 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 April 5, 2008 Report Share Posted April 5, 2008 citação:Olá Delair, Não chegou aqui não. Envie novamente por favor Obrigado, Rossine FW 2.2c + @say + Clipper 5.2e + libs 5.3b / FWH 2.7 + @say + xHarbour Divinópolis/ MG id=quote>id=quote>Reenviado. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
qiinfo Posted April 9, 2008 Report Share Posted April 9, 2008 ...ainda não recebi Teria como postar em dicas ? 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 April 9, 2008 Report Share Posted April 9, 2008 Se alguém me disser como se faz, posso postar... Havia faltado a definição de keybd_event. Segue a baixo todo o prg, compilado com xHarbour 1.0.0 e ADS 8.02. #define KEYEVENTF_KEYUP 2 function Main() memvar oWnd private oWnd define window oWnd title "Teste de ShowMenu()" mdi from 0,0 to 15,80 menu MenuGer() activate window oWnd return NIL *** * Fim de Main() = Teste. static function SuaAcao() MsgInfo( "Estou em "+oWnd:oMenu:LastItem():cPrompt ) ShowMenu( ) return NIL *** * Fim de SuaAcao = Teste. //----------------------------------------------------------------------------- // Recupera mensagens dos itens do menu do resource/stringable. static function MenuGer() local oMnu MENU oMnu MENUITEM "SubMenu 1" MENU MENUITEM "Item 1.1" ACTION SuaAcao() MENUITEM "Item 1.2" ACTION SuaAcao() SEPARATOR MENUITEM "Item 1.3" ACTION SuaAcao() MENUITEM "SubMenu 1.1" MENU MENUITEM "Item 1.1.1" ACTION SuaAcao() MENUITEM "Item 1.1.2" ACTION SuaAcao() MENUITEM "Item 1.1.3" ACTION SuaAcao() MENUITEM "Item 1.1.4" ACTION SuaAcao() ENDMENU SEPARATOR MENUITEM "Item 1.4" ACTION SuaAcao() ENDMENU SEPARATOR MENUITEM "Item 1" ACTION SuaAcao() MENUITEM "SubMenu 2" MENU MENUITEM "Item 2.1" ACTION SuaAcao() SEPARATOR MENUITEM "Item 2.2" ACTION SuaAcao() MENUITEM "SubMenu 2.1" MENU MENUITEM "Item 2.1.1" ACTION SuaAcao() MENUITEM "Item 2.1.2" ACTION SuaAcao() MENUITEM "SubMenu 2.1.1" MENU MENUITEM "Item 2.1.1.1" ACTION SuaAcao() MENUITEM "Item 2.1.1.2" ACTION SuaAcao() SEPARATOR MENUITEM "Item 2.1.1.3" ACTION SuaAcao() MENUITEM "Item 2.1.1.4" ACTION SuaAcao() ENDMENU MENUITEM "Item 2.1.3" ACTION SuaAcao() MENUITEM "Item 2.1.4" ACTION SuaAcao() ENDMENU MENUITEM "Item 2.3" ACTION SuaAcao() SEPARATOR MENUITEM "SubMenu 2.2" MENU MENUITEM "Item 2.2.1" ACTION SuaAcao() MENUITEM "Item 2.2.2" ACTION SuaAcao() MENUITEM "Item 2.2.3" ACTION SuaAcao() MENUITEM "Item 2.2.4" ACTION SuaAcao() ENDMENU MENUITEM "Item 2.4" ACTION SuaAcao() ENDMENU ENDMENU return oMnu *** * Fim de MenuGer( oM ) = Teste. //----------------------------------------------------------------------------- // Reabre o menu que chamou uma rotina. // 1§ Descobre o caminho para se chegar ate oM:LastItem() // 2§ Abre o menu simulando a tecla Alt e, em seguida, a // sequencia de setas para chegar ate oM:LastItem() function ShowMenu( oM, nNiv ) 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 :=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), ">" ) ) 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" ************************************************************ id=code>id=code>----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
qiinfo Posted April 9, 2008 Report Share Posted April 9, 2008 Show de bola Delair show de bola...show de bola...show de bola Parabéns funcionou 100% Na minha opnião, uma grande contribuição para o FWH Valeu mesmo, 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...
Daniel Lopes Filho Posted April 9, 2008 Report Share Posted April 9, 2008 otimo exemplo ... pra quem esta migrando a aplicação de modo texto para modo grafico ... isso é maravilhoso parabens manda o exemplo pro linhares pra ele colocar no samples do fw ****** 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...
laurenti Posted April 10, 2008 Report Share Posted April 10, 2008 Realmente fantastica !!!,caiu como uma luva no meu sistema de folha de pagamento onde tenho um menu enorme, e o pessoal já me cobravam a tempo essa solução. parabéns !!! FWH7.04/XH9971/Pelles/Mysql/aprendiz(Java/PHP) laurentinocarlos@gmail.com Rio de Janeiro/Montes/Curvel Claros MG Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted April 10, 2008 Report Share Posted April 10, 2008 Obrigado. É bom saber que também posso ser útil. Que seja este um pequeno agradecimento às ajudas que tenho daà recebido. Estou providenciando para postar um exemplo em dicas. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
Daniel Lopes Filho Posted April 10, 2008 Report Share Posted April 10, 2008 depois poste uma dica pra postar em dicas hehehehe ****** 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...
Eroni Posted April 10, 2008 Report Share Posted April 10, 2008 Pessoal, se me permitem meter o bedelho, eu decidi resolver esta questão de uma outra maneira. Resolvi fazer como o Windows faz, colocar os programas mais utilizados no menu iniciar. O que eu fiz foi fazer uma barra de botões na janela principal e cada vez que se usa uma função, esta função está associada a um botão com sua imagem já pré-definida juntamente com o perfil do usuário e vai se atualizando automaticamente. Cada vez que o usuário entra no sistema, o sistema verifica quais as opções mais utilizadas por ele e coloca na barra de botões ordenado decrescente da esquerda pra direita. Desta forma, o usuário terá sempre a mão a sua opção mais utilizada. Eroni (48) 3045-1575 xHarbour 0.99.5 & FWH 2.4 SqlLib, MySql & Dbf Quote Link to comment Share on other sites More sharing options...
Vitor Reis Posted April 10, 2008 Report Share Posted April 10, 2008 Realmente muito bom Delair funciona mesmo.. apenas uma observação, quando não usamos pelo menu.. isto é eu abro pelos botoes de atalho.. sua rotina dá um erro.. pois ele tenta retornar ao item do menu chamado.. e nao houve nenhum objeto do menu.. entao apenas modifiquei sua funcao.. apenas esse detalhe... PARABENS !!! function ShowMenu( oM, nNiv ) local nItem, oLItM, cMov :="", cMv, nChr default oM :=WndMain():oMenu default nNiv :=0 oLItM :=oM:LastItem() // coloquei isso aqui para quando nao é chamado // pelo menuitem if empty(oLItM) return .f. end ////////////////////// vitor s.b.c. Quote Link to comment Share on other sites More sharing options...
laurenti Posted April 11, 2008 Report Share Posted April 11, 2008 Eroni,sua idéia também é ótima, você só não teve a iniciativa de compartilhá-la conosco e é isso que faz desse fórum o melhor de todos.... FWH7.04/XH9971/Pelles/Mysql/aprendiz(Java/PHP) laurentinocarlos@gmail.com Rio de Janeiro/Montes/Curvel Claros MG Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted April 11, 2008 Report Share Posted April 11, 2008 citação:Realmente muito bom Delair funciona mesmo.. apenas uma observação, quando não usamos pelo menu.. isto é eu abro pelos botoes de atalho.. sua rotina dá um erro.. pois ele tenta retornar ao item do menu chamado.. e nao houve nenhum objeto do menu.. entao apenas modifiquei sua funcao.. apenas esse detalhe... PARABENS !!! function ShowMenu( oM, nNiv ) local nItem, oLItM, cMov :="", cMv, nChr default oM :=WndMain():oMenu default nNiv :=0 oLItM :=oM:LastItem() // coloquei isso aqui para quando nao é chamado // pelo menuitem if empty(oLItM) return .f. end ////////////////////// vitor s.b.c. id=quote>id=quote>Maravilha!! Já estou ganhando, também. Já corrigi a função. Obrigado. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted April 11, 2008 Report Share Posted April 11, 2008 citação:Pessoal, se me permitem meter o bedelho, eu decidi resolver esta questão de uma outra maneira. Resolvi fazer como o Windows faz, colocar os programas mais utilizados no menu iniciar. O que eu fiz foi fazer uma barra de botões na janela principal e cada vez que se usa uma função, esta função está associada a um botão com sua imagem já pré-definida juntamente com o perfil do usuário e vai se atualizando automaticamente. Cada vez que o usuário entra no sistema, o sistema verifica quais as opções mais utilizadas por ele e coloca na barra de botões ordenado decrescente da esquerda pra direita. Desta forma, o usuário terá sempre a mão a sua opção mais utilizada. Eroni (48) 3045-1575 xHarbour 0.99.5 & FWH 2.4 SqlLib, MySql & Dbf id=quote>id=quote>Bem legal sua solução. Me parece que seria ainda mais simpática se ela fosse incorporada ao TMru, pois não popularia a tela com elementos extras (botões). Alguém se habilita em alterar a classe TMru, para guardar e retornar todos os parâmentos dos últimos MenuItems? Vocês acham válida esta idéia? ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
Vitor Reis Posted April 11, 2008 Report Share Posted April 11, 2008 citação: citação:Realmente muito bom Delair funciona mesmo.. apenas uma observação, quando não usamos pelo menu.. isto é eu abro pelos botoes de atalho.. sua rotina dá um erro.. pois ele tenta retornar ao item do menu chamado.. e nao houve nenhum objeto do menu.. entao apenas modifiquei sua funcao.. apenas esse detalhe... PARABENS !!! function ShowMenu( oM, nNiv ) local nItem, oLItM, cMov :="", cMv, nChr default oM :=WndMain():oMenu default nNiv :=0 oLItM :=oM:LastItem() // coloquei isso aqui para quando nao é chamado // pelo menuitem if empty(oLItM) return .f. end ////////////////////// vitor s.b.c. id=quote>id=quote>Maravilha!! Já estou ganhando, também. Já corrigi a função. Obrigado. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 id=quote>id=quote>bom, và mais um problema,, em relatorios quando abre a preview, ele nao retorna... alguem se habilita??? estou tentanto tambem vitor s.b.c. Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted April 11, 2008 Report Share Posted April 11, 2008 citação:bom, và mais um problema,, em relatorios quando abre a preview, ele nao retorna... alguem se habilita??? estou tentanto tambem vitor s.b.c. id=quote>id=quote>Como estou apenas iniciando em FW não tenho nenhum relatório com preview, para testar, mas acredito que deva estar perdendo a informação de LastItem. Para contornar, armazene WndMain():oMenu em variável local, no inÃcio de seu relatório, e passe para ShowMenu() como parâmetro oM. Nos reporte quando testar. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
elitenet Posted April 12, 2008 Report Share Posted April 12, 2008 Se quiserem eu coloco isso dentro da classe Tmenu sem precisar alterar a classe nativa!... Marcelo Gomes elitenet@terra.com.br (32) 3728-1288 Muriae - MG FW 2.3C/FWH 2.6/CLIPPER 5.X/XHARBOUR/C/C++/JAVA/DELPHI/XMATE/MD/MYSQL/FIREBIRD/INTERBASE Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted April 14, 2008 Report Share Posted April 14, 2008 Oi Marcelo. citação:Se quiserem eu coloco isso dentro da classe Tmenu sem precisar alterar a classe nativa!... Marcelo Gomes elitenet@terra.com.br (32) 3728-1288 Muriae - MG FW 2.3C/FWH 2.6/CLIPPER 5.X/XHARBOUR/C/C++/JAVA/DELPHI/XMATE/MD/MYSQL/FIREBIRD/INTERBASE id=quote>id=quote>Você está se referindo ao TMru() ou ShowMenu()? Ambas me interessam desde que sejam opcionais, selecionáveis para cada item. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 Quote Link to comment Share on other sites More sharing options...
Delair José Gasperin Posted April 14, 2008 Report Share Posted April 14, 2008 Até que em fim consegui postar ShowMenu() em dicas, mas para isso precisou que o Gilmer acertasse meu cadastro. ----------------------------------------------------------- FiveWin 8.02/ xHarbour 8.02 / Workshop / ADS 6.2 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.