FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Error con los aceleradores del menú
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Error con los aceleradores del menú
Posted: Wed Apr 17, 2013 12:49 AM

Antonio ¿alguna noticia sobre este punto?

Saludos

Quique
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error con los aceleradores del menú
Posted: Wed Apr 17, 2013 06:15 AM

Quique,

Has probado asi ?

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Error con los aceleradores del menú
Posted: Wed Apr 17, 2013 06:54 PM
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 (fw): Select all Collapse
#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: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 (fw): Select all Collapse
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 )
Saludos

Quique
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error con los aceleradores del menú
Posted: Wed Apr 17, 2013 08:03 PM

Quique,

Mientras no haya una ventana hija creada puedes hacer:

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Error con los aceleradores del menú
Posted: Wed Apr 17, 2013 08:20 PM
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 (fw): Select all Collapse
#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.
Saludos

Quique
Posts: 44162
Joined: Thu Oct 06, 2005 05:47 PM
Re: Error con los aceleradores del menú
Posted: Wed Apr 17, 2013 08:51 PM
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 (fw): Select all Collapse
#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
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Error con los aceleradores del menú
Posted: Wed Apr 17, 2013 09:39 PM
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 (fw): Select all Collapse
            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 :-)
Saludos

Quique

Continue the discussion