FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Select a buttonbar button by key
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Select a buttonbar button by key
Posted: Sat Mar 29, 2008 02:21 PM

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.

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Select a buttonbar button by key
Posted: Sat Mar 29, 2008 03:09 PM

Marco,

As you are using a pulldown menu, then you can define an accelerator for each menu item whose action matches with a specific buttonbar button action

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Select a buttonbar button by key
Posted: Sat Mar 29, 2008 03:15 PM

Yes, you are right
but - obviously - I have this problem when I use the buttonbar without menu. :roll:

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Select a buttonbar button by key
Posted: Sat Mar 29, 2008 07:11 PM

Solved. I used the function SetKey as turnaround.

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Select a buttonbar button by key
Posted: Sat Mar 29, 2008 07:42 PM

Marco, could you post some code, please.
Thanks in advance
otto

Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Select a buttonbar button by key
Posted: Sat Mar 29, 2008 09:42 PM

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

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 4840
Joined: Fri Nov 18, 2005 04:52 PM
Select a buttonbar button by key
Posted: Sun Mar 30, 2008 05:48 PM

Marco,

Here is an idea. Perhaps you can define a menu and then hide it (oMenu:hide()). This way you could define the hot-keys and use the Alt and Ctrl key combos. They should still work even though the menu is hidden.

James

FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Select a buttonbar button by key
Posted: Sun Mar 30, 2008 07:49 PM

James, I get this error:
Error description: Error BASE/1004 Message not found: TMENU:HIDE
Regards,
Otto

Posts: 4840
Joined: Fri Nov 18, 2005 04:52 PM
Select a buttonbar button by key
Posted: Sun Mar 30, 2008 08:35 PM

Otto,

My mistake. It seems that TMenu does not have a hide() method.

Perhaps Antionio has an idea?

James

FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Posts: 782
Joined: Wed Dec 19, 2007 07:50 AM
Select a buttonbar button by key
Posted: Mon Mar 31, 2008 03:07 AM
Hi James:
James Bott wrote:My mistake. It seems that TMenu does not have a hide() method.

Good idea, menus don't have but buttons do, you can define hidden (or placed beyond window's bounds) buttons with accelerator keys.

Regards.

Manuel Mercado
manuelmercado at prodigy dot net dot mx
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Select a buttonbar button by key
Posted: Mon Mar 31, 2008 05:52 AM

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

Posts: 4840
Joined: Fri Nov 18, 2005 04:52 PM
Select a buttonbar button by key
Posted: Mon Mar 31, 2008 05:58 AM

Manuel,

>Good idea, menus don't have but buttons do, you can define hidden (or placed beyond window's bounds) buttons with accelerator keys.

I have used this technique before for dialogs but I never tried it with a window. Good idea.

James

FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Select a buttonbar button by key
Posted: Mon Mar 31, 2008 03:48 PM

>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.

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 4840
Joined: Fri Nov 18, 2005 04:52 PM
Select a buttonbar button by key
Posted: Mon Mar 31, 2008 03:57 PM

Marco,

>The menu accelerator activate the ACTION method while the button accelerator only SELECT the control.

If I remember correctly this is not true--button hotkeys are executed just like menu hotkeys.

Have you tried it?

James

FWH 18.05/xHarbour 1.2.3/BCC7/Windows 10
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Select a buttonbar button by key
Posted: Mon Mar 31, 2008 05:21 PM

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 "&amp;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

Continue the discussion