當在記事本中,使用智能ABCIME輸入chz這幾個字母時,會出現如下的備選列表:
page1. 1.創造 2.車站 3.沉重 4.稱讚 5.成長 6.初中 7.創作 8.長征 9.廠長
page2. 1.沉著 2.出租 3.窗子 4.垂直 5.產值 6.場子 7.車子 8.叉子 9.城鎮
page3. 1.傳真 2.池子 3.充足 4.出自 5.蟲子 6.處長 7.船隻 8.廠子 9.超支
page4. 1.車軸 2.遲早 3.綢子 4.初戰 5.處置 6.船長 7.鎚子 8.尋找 9.岔子
page5. 1.插嘴 2.鏟子 3... (略)
當在cmd命令提示字元下,使用智能ABCIME時,也會出現以上的列表,只是因為它是橫著顯示的,由於寬度原因,每頁只能顯示7個詞。初看起來這樣毫無問題。但實際上,存在三個問題:
1.打死也找不到page4的 2.遲早 3.綢子 4.初戰 5.處置 6.船長 7.鎚子 8.尋找 這幾個詞-___-b
2.在每一頁,數字鍵8或9沒有顯示,卻可以按這兩個鍵輸入詞 -____-b
3.更可怕的是翻到第二頁之後詞就全錯位了,完全沒法輸入顯示的詞-___-||||
仔細跟蹤了一下,發現cmd命令提示字元是使用conime這個進程外組件來實現輸入的,它是一個IME full-aware的組件。由於要自己顯示拼字列表,它在每個WM_IME_NOTIFY的IMN_OPENCANDIDATE或IMN_CHANGECANDIDATE訊息時會嘗試調用
ImmNotifyIME(himc, NI_SETCANDIDATE_PAGESTART, 0, startpos);
ImmNotifyIME(himc, NI_SETCANDIDATE_PAGESIZE, 0, pagesize);
這個API來設定頁起始位置和頁數量。但可恨的是智能ABCIME根本就沒有理會這個訊息。因此返回了FALSE。就是說,一個以7為步進,一個以9為步進,兩個存在真空區,造成了詞的丟失。上面只是其中的一個例子。
那麼這樣說來,這應該是智能ABC的BUG了?偶不認為這樣。首先,沒有對傳回值加以判斷是程式員的大忌,Windows既然設計了這樣一個API,就應該有它的錯誤處理。另外,IME介面設計的不完善也是Windows設計上的不足。從Windows95開始到Windows2000這麼多年,這個bug卻仍然存在。其實,從備選字列表中選字並不是一個需要個人化的工作,Windows卻讓它由IME設計者自己來做了(由IME自己響應數字鍵0-9);另一方面,在ImmGetProperty中卻又明確地給出了IME_PROP_CANDLIST_START_FROM_1這樣的屬性!既然如此,為何不明確規定必須用數字鍵選字,並且由IME調用端來執行選字、翻頁的操作呢?
偶寫到這裡,不禁倍感遺憾,唏噓不已。(當然,偶的水晶五筆是沒有這個BUG的,笑^___#@)