TMsgBar KEYBOARD clause
Posted: Mon Feb 06, 2006 10:15 am
When KEYBOARD clause is used we can click with the mouse on the Num, Caps and Ins items to toggle their status. But, specifically for Num and Caps, the status change is not reflected by the keyboard light and this brings to an inconsistency between the status itself and what the keyboard lights say.
Possible fixes are:
1) remove the item click at least on Num and Caps (but I would remove it on Ins also).
2) use the appropriate API to correctly change the lights status.
For the point 2, the following sample is from Francesco Saverio Giudice:
EMG
Possible fixes are:
1) remove the item click at least on Num and Caps (but I would remove it on Ins also).
2) use the appropriate API to correctly change the lights status.
For the point 2, the following sample is from Francesco Saverio Giudice:
Code: Select all
#include "common.ch"
PROCEDURE MAIN()
? "Attiva capslock"
SetCapsLock( TRUE )
Inkey( 0 )
? "Attiva numlock"
SetNumLock( TRUE )
Inkey( 0 )
? "Stato CAPSLOCK : " + IIF( GetCapsLock(), "ON ", "OFF" )
? "Stato NUMLOCK : " + IIF( GetNumLock(), "ON ", "OFF" )
Inkey( 0 )
? "Disattiva capslock"
SetCapsLock( FALSE )
Inkey( 0 )
? "Disattiva numlock"
SetNumLock( FALSE )
Inkey( 0 )
? "Stato CAPSLOCK : " + IIF( GetCapsLock(), "ON ", "OFF" )
? "Stato NUMLOCK : " + IIF( GetNumLock(), "ON ", "OFF" )
Inkey( 0 )
RETURN
#pragma BEGINDUMP
#include <windows.h>
#include "hbapi.h"
#define TOGGLED 0x0001
void SetKeyLock( BYTE vKey, BOOL bState )
{
BOOL bCurrentState;
bCurrentState = ( GetKeyState( vKey ) & TOGGLED );
if( (bState && !bCurrentState) ||
(!bState && bCurrentState) )
{
// Simulate a key press
keybd_event( vKey,
0,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
// Simulate a key release
keybd_event( vKey,
0,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
}
BOOL GetKeyLock( int vKey )
{
return ( GetKeyState( vKey ) & TOGGLED );
}
HB_FUNC( SETCAPSLOCK )
{
SetKeyLock( VK_CAPITAL, hb_parl( 1 ) );
}
HB_FUNC( SETNUMLOCK )
{
SetKeyLock( VK_NUMLOCK, hb_parl( 1 ) );
}
HB_FUNC( GETCAPSLOCK )
{
hb_retl( GetKeyLock( VK_CAPITAL ) );
}
HB_FUNC( GETNUMLOCK )
{
hb_retl( GetKeyLock( VK_NUMLOCK ) );
}
#pragma ENDDUMP