Error con los aceleradores del menú

Re: Error con los aceleradores del menú

Postby quique » Wed Apr 17, 2013 12:49 am

Antonio ¿alguna noticia sobre este punto?
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con los aceleradores del menú

Postby Antonio Linares » Wed Apr 17, 2013 6:15 am

Quique,

Has probado asi ?

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

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41461
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con los aceleradores del menú

Postby quique » Wed Apr 17, 2013 6: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: 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 )

 
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con los aceleradores del menú

Postby Antonio Linares » Wed Apr 17, 2013 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41461
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con los aceleradores del menú

Postby quique » Wed Apr 17, 2013 8: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: 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.
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Re: Error con los aceleradores del menú

Postby Antonio Linares » Wed Apr 17, 2013 8: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: 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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41461
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error con los aceleradores del menú

Postby quique » Wed Apr 17, 2013 9: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: 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 :)
Saludos
Quique
User avatar
quique
 
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 144 guests