Select a buttonbar button by key
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Select a buttonbar button by key
Hi,
unfortunately I still have a lot of customers that prefer to use the keyboard instead of the mouse (often in accounting application where the big work is a data-entry work).
In this sample www.softwarexp.co.uk/beta/screen2.png I have a office style buttonbar. Could be possibile to select a button of this buttonbar using the keyboard ?
Thanks.
unfortunately I still have a lot of customers that prefer to use the keyboard instead of the mouse (often in accounting application where the big work is a data-entry work).
In this sample www.softwarexp.co.uk/beta/screen2.png I have a office style buttonbar. Could be possibile to select a button of this buttonbar using the keyboard ?
Thanks.
Best Regards,
Marco Turco
SOFTWARE XP LLP
Marco Turco
SOFTWARE XP LLP
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
Sure.
In this sample the user can execute the button "Write" on the button bar with a mouse click or pressing the F2 key. I simply added a SetKey(VK_F2.. to make the same action.
Full executable available at www.softwarexp.co.uk/beta/test.zip
Obviously I would like to use a "Alt-W" key in this case but - as I know - I can't assign an Alt-<nKey> to the SetKey function so I used a function key.
*****************
#include "fivewin.ch"
function main()
local oWnd
local nClrText
local oBar2
local oFont
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -10
DEFINE WINDOW oWnd TITLE "Test"
SetKey( VK_F2, { || ExecFunc(2) } )
oBar2 := TC5StBar():New( 46,10, 400, 35, oWnd, rgb(227,239,255), RGB(171,207,255), .f., oFont, nClrText )
oBar2:lRightToLeft := .f.
oWnd:oTop := oBar2
oBar2:lBorder := .t.
oBar2:AddItem( "", "bmpsmall\cambios.bmp" , {||ExecFunc(1)}, {||.t.}, .f., "accesos" )
oBar2:AddItem( "Write (F2)", "bmpsmall\capital.bmp", {||ExecFunc(2)}, {||.t.}, .f., "write" )
oBar2:AddItem( "", "bmpsmall\crossref.bmp", {||ExecFunc(3)}, {||.t.}, .f., "tareas" )
oBar2:AddItem( "", "bmpsmall\datetime.bmp", {||ExecFunc(4)}, {||.t.}, .f., "diario" )
ACTIVATE WINDOW oWnd ;
ON INIT WndCenter( oWnd:hWnd )
return nil
function ExecFunc(nMode)
if nMode=2
msginfo("Write")
endif
return nil
In this sample the user can execute the button "Write" on the button bar with a mouse click or pressing the F2 key. I simply added a SetKey(VK_F2.. to make the same action.
Full executable available at www.softwarexp.co.uk/beta/test.zip
Obviously I would like to use a "Alt-W" key in this case but - as I know - I can't assign an Alt-<nKey> to the SetKey function so I used a function key.
*****************
#include "fivewin.ch"
function main()
local oWnd
local nClrText
local oBar2
local oFont
DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 0, -10
DEFINE WINDOW oWnd TITLE "Test"
SetKey( VK_F2, { || ExecFunc(2) } )
oBar2 := TC5StBar():New( 46,10, 400, 35, oWnd, rgb(227,239,255), RGB(171,207,255), .f., oFont, nClrText )
oBar2:lRightToLeft := .f.
oWnd:oTop := oBar2
oBar2:lBorder := .t.
oBar2:AddItem( "", "bmpsmall\cambios.bmp" , {||ExecFunc(1)}, {||.t.}, .f., "accesos" )
oBar2:AddItem( "Write (F2)", "bmpsmall\capital.bmp", {||ExecFunc(2)}, {||.t.}, .f., "write" )
oBar2:AddItem( "", "bmpsmall\crossref.bmp", {||ExecFunc(3)}, {||.t.}, .f., "tareas" )
oBar2:AddItem( "", "bmpsmall\datetime.bmp", {||ExecFunc(4)}, {||.t.}, .f., "diario" )
ACTIVATE WINDOW oWnd ;
ON INIT WndCenter( oWnd:hWnd )
return nil
function ExecFunc(nMode)
if nMode=2
msginfo("Write")
endif
return nil
Best Regards,
Marco Turco
SOFTWARE XP LLP
Marco Turco
SOFTWARE XP LLP
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
Manuel,
Depending what controls in your window are active you can use
METHOD KeyDown( nKey, nFlags ).
As xBrowser usually has focus in my windows I use this method.
Maybe the METHOD KeyDown( nKey, nFlags ) from the windows class could be changed: But I don’t know if this is a good idea.
Regards,
Otto
Depending what controls in your window are active you can use
METHOD KeyDown( nKey, nFlags ).
As xBrowser usually has focus in my windows I use this method.
Maybe the METHOD KeyDown( nKey, nFlags ) from the windows class could be changed: But I don’t know if this is a good idea.
Regards,
Otto
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
>Good idea, menus don't have but buttons do, you can define hidden (or placed beyond window's bounds) buttons with accelerator keys.
Yes, but the accelerator system is different beetween MENU and BUTTON.
The menu accelerator activate the ACTION method while the button accelerator only SELECT the control.
Yes, but the accelerator system is different beetween MENU and BUTTON.
The menu accelerator activate the ACTION method while the button accelerator only SELECT the control.
Best Regards,
Marco Turco
SOFTWARE XP LLP
Marco Turco
SOFTWARE XP LLP
- James Bott
- Posts: 4654
- Joined: Fri Nov 18, 2005 4:52 pm
- Location: San Diego, California, USA
- Contact:
- Marco Turco
- Posts: 858
- Joined: Fri Oct 07, 2005 12:00 pm
- Location: London
- Contact:
I checked that in a oWnd:oWndClient context the accelerator on a button only select the control while in a dialog context the bAction method is called.
See this sample test.
#include "FiveWin.ch"
function Main()
local oWnd
DEFINE WINDOW oWnd TITLE "Test" MENU BUILDMENU() MDI
@1,1 button oBtn prompt "&Test" of oWnd:oWndClient;
ACTION MSGINFO("TEST")
ACTIVATE WINDOW oWnd
return nil
function BuildMenu()
local oMenu
local cAction
MENU oMenu
MENUITEM "Quit";
ACTION oWnd:End()
ENDMENU
RETURN(OMENU)
See this sample test.
#include "FiveWin.ch"
function Main()
local oWnd
DEFINE WINDOW oWnd TITLE "Test" MENU BUILDMENU() MDI
@1,1 button oBtn prompt "&Test" of oWnd:oWndClient;
ACTION MSGINFO("TEST")
ACTIVATE WINDOW oWnd
return nil
function BuildMenu()
local oMenu
local cAction
MENU oMenu
MENUITEM "Quit";
ACTION oWnd:End()
ENDMENU
RETURN(OMENU)
Best Regards,
Marco Turco
SOFTWARE XP LLP
Marco Turco
SOFTWARE XP LLP