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

這樣就可以啦.


arrow
arrow
    全站熱搜

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