Page 1 of 1

switch display when press SHIFT, CTRL or ALT ?

Posted: Fri Feb 19, 2021 1:44 pm
by AUGE_OHR
hi,

i can use

Code: Select all

   ON KEY F1 ACTION 
   ON KEY SHIFT + F1 ACTION
   ON KEY CONTROL + F1 ACTION 
   ON KEY ALT + F1 ACTION 
now i like to "show" right Button when press SHIFT or CTRL or ALT
how under harbour / HMB :idea:

Re: switch display when press SHIFT, CTRL or ALT ?

Posted: Fri Feb 19, 2021 2:19 pm
by danielmaximiliano

Re: switch display when press SHIFT, CTRL or ALT ?

Posted: Fri Feb 19, 2021 2:58 pm
by edk
Look at sample in HMG: c:\hmg.3.4.4\SAMPLES\Events\On_Key\ON_KEY_3\

Re: switch display when press SHIFT, CTRL or ALT ?

Posted: Fri Feb 19, 2021 4:09 pm
by AUGE_OHR
hi,

thx for Answer

Serge Sample show how to use Macro with Fx Key
Edward Sample show how to get Event and "Key"

i want 4 x 11 (12) Fx Key and show SHIFT, CTRL and ALT Button when Press before Fx Key

how can i realize it under harbour / HMG :idea:
FxButtons.gif
FxButtons.gif (37.06 KiB) Viewed 1218 times

Re: switch display when press SHIFT, CTRL or ALT ?

Posted: Fri Feb 19, 2021 6:43 pm
by andyglezl
Maybe...

Code: Select all

		CASE nMsg == WM_LBUTTONDOWN
				IF GET_STATE_VK_CONTROL()=.T.
				     ...
				IF GET_STATE_VK_SHIFT()=.T.
				     ...

Re: switch display when press SHIFT, CTRL or ALT ?

Posted: Fri Feb 19, 2021 7:25 pm
by AUGE_OHR
hi,

have found HB_FUNC in c:\MiniGUI\SAMPLES\Advanced\ReadKey\demo.prg, thx

Code: Select all

HB_FUNC (GET_STATE_VK_SHIFT)
{
   if (GetKeyState(VK_SHIFT) & 0x8000)
       hb_retl (TRUE);
   else
       hb_retl (FALSE);
}


HB_FUNC (GET_STATE_VK_CONTROL)
{
   if (GetKeyState(VK_CONTROL) & 0x8000)
       hb_retl (TRUE);
   else
       hb_retl (FALSE);
}


HB_FUNC (GET_STATE_VK_ALT)
{
   if (GetKeyState(VK_MENU) & 0x8000)
       hb_retl (TRUE);
   else
       hb_retl (FALSE);
}

Re: switch display when press SHIFT, CTRL or ALT ?

Posted: Fri Feb 19, 2021 9:14 pm
by edk
You can also check left and right Shift/Ctrl/Alt keys

Code: Select all

#include <hmg.ch>

Function Main()

DEFINE WINDOW Form_1 AT 0 ,0 WIDTH 300 HEIGHT 500 TITLE "" MAIN

	@10, 20 LABEL Info VALUE "Press Shift and/or Ctrl and/or Alt keys" AUTOSIZE

	@50, 20 LABEL LeftShift VALUE "" AUTOSIZE
	@85, 20 LABEL RightShift VALUE "" AUTOSIZE
	@120, 20 LABEL Shift VALUE "" AUTOSIZE

	@200, 20 LABEL LeftCtrl VALUE "" AUTOSIZE
	@235, 20 LABEL RightCtrl VALUE "" AUTOSIZE
	@270, 20 LABEL Ctrl VALUE "" AUTOSIZE

	@350, 20 LABEL LeftAlt VALUE "" AUTOSIZE
	@385, 20 LABEL RightAlt VALUE "" AUTOSIZE
	@420, 20 LABEL Alt VALUE "" AUTOSIZE

	ShowKeyStatus()

END WINDOW

CREATE EVENT PROCNAME KbdPress()

Form_1.Center
Form_1.Activate

Return NIL

************************************
FUNCTION KbdPress()
Local nMSG := EventMSG()

IF nMSG == WM_KEYDOWN .OR. nMSG == WM_KEYUP .OR. nMSG == WM_SYSKEYDOWN .OR. nMSG == WM_SYSKEYUP
	ShowKeyStatus()
ENDIF

RETURN 

FUNCTION ShowKeyStatus()
	Form_1.LeftShift.VALUE := "Left Shift is " + IF (GetKeyState ( VK_LSHIFT ) < 0, 'PRESSED', 'released')
	Form_1.RightShift.VALUE := "Right Shift is " + IF (GetKeyState ( VK_RSHIFT ) < 0, 'PRESSED', 'released')
	Form_1.Shift.VALUE := "Any Shift is " + IF (GetKeyState ( VK_SHIFT ) < 0, 'PRESSED', 'released')

	Form_1.LeftCtrl.VALUE := "Left Ctrl is " + IF (GetKeyState ( VK_LCONTROL ) < 0, 'PRESSED', 'released')
	Form_1.RightCtrl.VALUE := "Right Ctrl is " + IF (GetKeyState ( VK_RCONTROL ) < 0, 'PRESSED', 'released')
	Form_1.Ctrl.VALUE := "Any Ctrl is " + IF (GetKeyState ( VK_CONTROL ) < 0, 'PRESSED', 'released')

	Form_1.LeftAlt.VALUE := "Left Alt is " + IF (GetKeyState ( VK_LMENU ) < 0, 'PRESSED', 'released')
	Form_1.RightAlt.VALUE := "Right Alt is " + IF (GetKeyState ( VK_RMENU ) < 0, 'PRESSED', 'released')
	Form_1.Alt.VALUE := "Any Alt is " + IF (GetKeyState ( VK_MENU ) < 0, 'PRESSED', 'released')
RETURN