program
map
MODULE('WINAPI')
SJ_GetKeyboardLayoutName(LONG pwszKLID),BOOL,PROC,PASCAL,NAME('GetKeyboardLayoutNameA')
SJ_LoadKeyboardLayout(LONG pwszKLID, ULONG xFlags),LONG,PROC,PASCAL,NAME('LoadKeyboardLayoutA')
SJ_UnLoadKeyboardLayout(LONG xhkl),BOOL,PROC,PASCAL,NAME('UnloadKeyboardLayout')
SJ_GetLastError(),UNSIGNED,PASCAL,NAME('GetLastError')
END
end
EnglishString STRING(60)
ArabicString STRING(60)
KeyBoardName CSTRING(255)
KB_Addr LONG(0)
Err LONG(0)
KLF_ACTIVATE EQUATE(1)
KLF_REPLACELANG EQUATE(16)
Arb_Eng BYTE(0)
ArabicKeyboard EQUATE('00000401')
EnglishKeyboard EQUATE('00000409')
Eng_HKL LONG
Arb_HKL LONG
Window WINDOW('Keyboard Language Test'),AT(,,164,90),FONT('Arial', 8,, FONT:bold),GRAY,WALLPAPER('BROWN.JPG'), Tiled
PROMPT('In English'), AT(3,6), USE(?Prompt:EnglishString), TRN
ENTRY(@S60), AT(36,6,121,10), USE(EnglishString), LEFT(1)
PROMPT('In Arabic'), AT(3,21), USE(?Prompt:ArabicString), TRN
ENTRY(@S60), AT(36,21,121,10), USE(ArabicString), LAYOUT(1), FONT('Andalus', 9,,, CHARSET:ARABIC)
STRING(@S255), AT(2,39,161), USE(KeyBoardName), FONT(,, COLOR:Red), CENTER
BUTTON('&Get Keyboard Layout'), AT(3,56,84,14), CURSOR('finger.cur'), USE(?GetLayout), LEFT
BUTTON('&Toggle Keyboard Layout'), AT(3,73,84,14), CURSOR('finger.cur'), USE(?SetLayout), LEFT
BUTTON('&Close'), AT(110,73,48,14), CURSOR('finger.cur'), USE(?Close), ICON('WACANCEL.ICO'), |
LEFT
END
CODE
OPEN(Window)
DISPLAY()
ACCEPT
CASE EVENT()
OF EVENT:CloseWindow
BREAK
OF EVENT:Accepted
CASE FIELD()
OF ?GetLayout
KB_Addr = ADDRESS(KeyBoardName)
IF SJ_GetKeyboardLayoutName(KB_Addr) > 0
DISPLAY(?KeyBoardName)
ELSE
Err = SJ_GetLastError() ; IF Err THEN MESSAGE('Error = ' & Err).
END
OF ?SetLayout
Arb_Eng = 1 - Arb_Eng
IF Arb_Eng
KeyBoardName = ArabicKeyboard
ELSE
KeyBoardName = EnglishKeyboard ! UK
END
KB_Addr = ADDRESS(KeyBoardName) ; KeyBoardName = CLIP(KeyBoardName) & '<0>'
HKL# = SJ_LoadKeyBoardLayout(KB_Addr, KLF_ACTIVATE)
IF HKL# > 0
MESSAGE(HKL#)
IF Arb_Eng THEN Arb_HKL = HKL# ELSE Eng_HKL = HKL#.
ELSE
Err = SJ_GetLastError() ; MESSAGE('Error = ' & Err)
END
POST(EVENT:Accepted, ?GetLayout)
OF ?Close
IF Eng_HKL
IF SJ_UnLoadKeyBoardLayout(Eng_HKL) > 0
ELSE
Err = SJ_GetLastError() ; MESSAGE('Error = ' & Err)
END
END
IF Arb_HKL
IF SJ_UnLoadKeyBoardLayout(Arb_HKL) > 0
ELSE
Err = SJ_GetLastError() ; MESSAGE('Error = ' & Err)
END
END
BREAK
END
END
END
CLOSE(Window)
RETURN