Page 2 of 2

Re: Error con los aceleradores del menú

PostPosted: Wed Apr 17, 2013 12:49 am
by quique
Antonio ¿alguna noticia sobre este punto?

Re: Error con los aceleradores del menú

PostPosted: Wed Apr 17, 2013 6:15 am
by Antonio Linares
Quique,

Has probado asi ?

oWnd:oWndActive:bGotFocus = { || msgBeep(), oWnd:oMenu:oAccTable:Activate() }

Re: Error con los aceleradores del menú

PostPosted: Wed Apr 17, 2013 6:54 pm
by quique
He hecho la prueba en el ejemplo2 que te envié, por si no lo tienes, aqui lo pongo tal como quedó con la modificación, y simplemente marca error precisamente en la línea como me indicas al iniciar el programa.

Code: Select all  Expand view

#include "FiveWin.ch"

function main()
   local oWnd, oMenu

   menu oMenu
      menuItem "Diálogo" action verVentana() accelerator ACC_ALT + ACC_CONTROL, asc( "V" )
   endMenu

   define window oWnd mdi menu oMenu menuInfo 7
//   oWnd:bGotFocus = { || msgBeep(), oWnd:oMenu:oAccTable:Activate() }
   oWnd:oWndActive:bGotFocus = { || msgBeep(), oWnd:oMenu:oAccTable:Activate() }
   activate window oWnd
return nil

function verVentana
   local oMenu, oDlg
   menu oMenu
      menuItem "Hola" action msgInfo( "hola" ) accelerator ACC_NORMAL,VK_F5
   endMenu
   define dialog oDlg
   activate dialog oDlg nowait
   oDlg:setMenu( oMenu )
return nil
 


Code: Select all  Expand view

Application
===========
   Path and name: d:\quiquesoft\ide\hbmk2\ejemplo2.exe (32 bits)
   Size: 1,652,224 bytes
   Compiler version: Harbour 3.2.0dev (r1304100110)
   FiveWin  Version: FWH 12.03
   Windows version: 6.1, Build 7601 Service Pack 1

   Time from start: 0 hours 0 mins 0 secs
   Error occurred at: 04/17/13, 13:49:00
   Error description: Error BASE/1005  No exported variable: BGOTFOCUS
   Args:
     [   1] = U  
     [   2] = B   {|| ... }

Stack Calls
===========
   Called from:  => _BGOTFOCUS( 0 )
   Called from: ejemplo2.prg => MAIN( 12 )

 

Re: Error con los aceleradores del menú

PostPosted: Wed Apr 17, 2013 8:03 pm
by Antonio Linares
Quique,

Mientras no haya una ventana hija creada puedes hacer:

oWnd:oWndClient:bGotFocus = { || msgBeep(), oWnd:oMenu:oAccTable:Activate() }

Re: Error con los aceleradores del menú

PostPosted: Wed Apr 17, 2013 8:20 pm
by quique
De esa manera ya habíamos visto que no funciona, pero lo volví a dejar, ahora el ejemplo queda así con las dos opciones:

Code: Select all  Expand view

#include "FiveWin.ch"

function main()
   local oWnd, oMenu

   menu oMenu
      menuItem "Ventana" action ventana( oWnd )
      menuItem "Diálogo" action verVentana() accelerator ACC_ALT + ACC_CONTROL, asc( "V" )
   endMenu

   define window oWnd mdi menu oMenu menuInfo 7
   oWnd:bGotFocus = { || msgBeep(), oWnd:oMenu:oAccTable:Activate() }
   activate window oWnd
return nil

function verVentana
   local oMenu, oDlg
   menu oMenu
      menuItem "Hola" action msgInfo( "hola" ) accelerator ACC_NORMAL,VK_F5
   endMenu
   define dialog oDlg
   activate dialog oDlg nowait
   oDlg:setMenu( oMenu )
return nil

function ventana( oWnd )
   local oMdi
   define window oMdi mdichild of oWnd
   activate window oMdi
   oWnd:oWndActive:bGotFocus = { || msgBeep(), oWnd:oMenu:oAccTable:Activate() }
return nil


Puedes ver que no recupera los aceleradores del menú al cerrar el diálogo en ninguno de los dos casos, pero el beep siempre se escucha, inclusive también comenté el bGotFocus en la función main() para asegurarme que no hubiera choque entre los dos y nada.

Re: Error con los aceleradores del menú

PostPosted: Wed Apr 17, 2013 8:51 pm
by Antonio Linares
Quique,

Asi va bien. Tras crear el diálogo restaura los aceleradores de la ventana principal.

Falta modificar en FWH que los aceleradores se disparen en diálogos no modales. En modales va bien.

Code: Select all  Expand view
#include "FiveWin.ch"

function main()
   local oWnd, oMenu

   menu oMenu
      menuItem "Ventana" action ventana( oWnd )
      menuItem "Diálogo" action verVentana() accelerator ACC_NORMAL,VK_F5
   endMenu

   define window oWnd mdi menu oMenu menuInfo 7
   oWnd:oWndClient:bGotFocus = { || msgBeep(), oWnd:oMenu:oAccTable:Activate() }
   activate window oWnd
return nil

function verVentana
   local oMenu, oDlg
   menu oMenu
      menuItem "Hola" action msgInfo( "hola" ) accelerator ACC_NORMAL,VK_F5
   endMenu
   define dialog oDlg
   activate dialog oDlg nowait
   
   oDlg:SetMenu( oMenu )

   WndMain():oWndClient:SetFocus()
   oDlg:SetFocus()

return nil

function ventana( oWnd )
   local oMdi
   define window oMdi mdichild of oWnd
   activate window oMdi
return nil

Re: Error con los aceleradores del menú

PostPosted: Wed Apr 17, 2013 9:39 pm
by quique
Gracias Antonio, ya quedó casi bien, no se porque en el ejemplo dos no falla pero en el programa que lo necesito tengo un problema, pero bueno, la parte importante y que si pegaba fuerte ya quedó.

No funcionan los aceleradores en los diálogos no modales, así que el detalle que me falla no trasciende mucho, porque supongo que ha de tener que ver con lo mismo, solo te lo comento por si hay que tomarlo en cuenta con la modificación que comentas.

Tengo estas dos líneas en el menú del diálogo

Code: Select all  Expand view

            menuItem hIdioma:mnuImprimir action ::oWnd:print() //ACCELERATOR ACC_CONTROL, asc( "P" )
            menuItem hIdioma:mnuConfImp  action printerSetup() //ACCELERATOR ACC_ALTCTRL, asc( "P" )
 


Si les dejo el ACCELERATOR no funciona la solución que me das, si los quito, si funciona, con cualquiera de los dos que deje falla y son los únicos aceleradores que tengo en el menú, tenía otro, pero ahora lo capturo en el keydown.

En el ejemplo no falla, aunque no funcionen los aceleradores, en mi programa sí, pero bueno, por lo pronto ya quedo :)