Q: 請問要如何在欄位當中做中英文切換?


A: 這裡需要用到幾個 Windows 作業系統的 DLL Function,所以必須在 PowerBuilder 宣告 External function ,然後再呼叫 External function 去執行。

宣告下列 global external function:
Function int GetModuleFileName(int hModule, REF string lpFileName,int nSize) Library "kernel32"

Function int GetWindowsDirectory(REF string lpBuffer,int nSize) Library "Kernel32.dll"

Function long GetKeyboardLayout(long dwLayout) Library "user32"

Function boolean ImmSimulateHotKey(int hWnd, long dwHotKeyID) Library "imm32.dll"

Function boolean ImmIsIME(long dwKeyboardLayout) Library "imm32.dll"

Function long ImmGetDefaultIMEWnd(long hWnd) Library "imm32.dll"

宣告一個 global variable:
integer IME_THOTKEY_IME_NONIME_TOGGLE = 112

在要變成中文的地方寫成如下:
long ll_kblayout
boolean lb_ret

ll_kblayout = GetKeyboardLayout(ll_kblayout)
IF NOT ImmIsIME(ll_kblayout) THEN
lb_ret = ImmSimulateHotKey(Handle(this), IME_THotkey_IME_NonIME_Toggle)
END IF

RETURN lb_ret

在要變成英文的地方寫成如下:
int wm_Ime_Control=643, imc_SetOpenStatus = 6
int imc_CloseStatusWindow = 33
long ll_kblayout, ll_hwnd, ll_ret
boolean lb_ret

ll_kblayout = GetKeyboardLayout(ll_kblayout)
IF ImmIsIME(ll_kblayout) THEN
lb_ret = ImmSimulateHotKey(Handle(this), IME_THotkey_IME_NonIME_Toggle)
END IF
RETURN lb_ret

這樣就可以啦.


全站熱搜
創作者介紹
創作者 PB 的頭像
PB

PowerBuilder 風雲再起 - PowerBuilder 使用者家族

PB 發表在 痞客邦 留言(1) 人氣()