能否從輸入法列出字、音對照(Unicode)? |
答題得分者是:s8556026
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
一 3 ㄧ ㄧˊ ㄧˋ
乙 1 ㄧˇ
丁 2 ㄉㄧㄥ ㄓㄥ
七 1 ㄑㄧ
乃 1 ㄋㄞˇ
九 1 ㄐㄧㄡˇ
了 2 ㄌㄜ˙ ㄌㄧㄠˇ
二 1 ㄦˋ
人 1 ㄖㄣˊ
儿 1 ㄖㄣˊ
入 1 ㄖㄨˋ
八 1 ㄅㄚ
几 2 ㄐㄧ ㄐㄧˇ
刀 1 ㄉㄠ
刁 1 ㄉㄧㄠ
力 1 ㄌㄧˋ
匕 1 ㄅㄧˇ
十 1 ㄕˊ
卜 1 ㄅㄨˇ
又 1 ㄧㄡˋ
三 1 ㄙㄢ
下 1 ㄒㄧㄚˋ
丈 1 ㄓㄤˋ
上 2 ㄕㄤˇ ㄕㄤˋ
丫 1 ㄧㄚ
丸 1 ㄨㄢˊ
凡 1 ㄈㄢˊ
久 1 ㄐㄧㄡˇ
么 1 ㄧㄠ
也 1 ㄧㄝˇ
乞 1 ㄑㄧˇ
于 1 ㄩˊ
亡 2 ㄨˊ ㄨㄤˊ
兀 1 ㄨˋ
刃 1 ㄖㄣˋ
勺 2 ㄕㄠˊ ㄕㄨㄛˋ
千 1 ㄑㄧㄢ
叉 1 ㄔㄚ
口 1 ㄎㄡˇ
土 1 ㄊㄨˇ
士 1 ㄕˋ
夕 1 ㄒㄧˋ
大 2 ㄉㄚˋ ㄉㄞˋ 我忘了哪抓的…有程式…EMAIL 給你…我不會上傳…要麻煩你了
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
Sorry
那是倚天的…不是MS的…
我想你早就有了 或許可以將此表轉成涵 Unicode 的表格
直接用 UltraEdit 開 轉成 Unicode
複製所要的 Unicode 再貼回去…
或是用程式轉… @@ 我的 UltraEdit 會自動轉碼
貼Unicode 自己轉成 BIG5 參考網頁…
http://home.att.net/~jameskass/
http://www.cl.cam.ac.uk/~mgk25/unicode.html#unicode 有了有了…
dwGCL = ImmGetConversionList(hkb, 0, bChinaWord, dwBuff(0), _
dwGCL, GCL_REVERSECONVERSION)
icount = dwBuff(8) '取得一共多少種字根組合,如"的"就有三種
If dwGCL > 0 Then
If nth > icount Then '沒有nth個的candidate
http://www.hosp.ncku.edu.tw/~cww/html/q00456.html 發表人 - s8556026 於 2004/02/23 15:31:28
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
修改錢大師的 code function QueryCompStr(hKB: HKL; const sChinese: AnsiString): string;
var
dwGCL: DWORD;
szBuffer: array[0..254] of char;
iMaxKey, iStart, i: integer;
icount, isel:integer;
TMP:STRING;
begin
Result := '';
iMaxKey := ImmEscape(hKB, 0, IME_ESC_MAX_KEY, nil);
if iMaxKey <= 0 then exit; // 看看這個輸入法是否支援 Reverse Conversion 功能
// 同時, 偵測需要多大的空間容納取得的資訊
// comment: 下次修改時可以改成動態配置記憶體的方式
dwGCL := ImmGetConversionList(
hKB,
0,
pchar(sChinese),
nil,
0,
GCL_REVERSECONVERSION);
if dwGCL <= 0 then Exit; // 該輸入法不支援 Reverse Conversion 功能 // 取得組字字根資訊, dwGCL 的值必須以上次呼叫 ImmGetConversionList
// 傳回值代入
dwGCL := ImmGetConversionList(
hKB,
0,
pchar(sChinese),
@szBuffer,
dwGCL,
GCL_REVERSECONVERSION);
icount:=byte( szbuffer[8]); if dwGCL > 0 then
begin
// 為什麼是 24?
{
TCandidateList = record
dwSize: DWORD;
dwStyle: DWORD;
dwCount: DWORD;
dwSelection: DWORD;
dwPageStart: DWORD;
dwPageSize: DWORD; 24-th byte
dwOffset: array[1..1] of DWORD;
end;
} for isel :=0 to icount -1 do
begin
iStart := byte(szBuffer[24 (isel )*4 ] );
for i := iStart to iStart iMaxKey * 2-1 do
begin
AppendStr(Result, szBuffer[i]);
AppendStr(Result,';');
end;
end;//for
end;
end;
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
引言: s8556026前輩: 對不起,讓你這分這麼難賺。小弟以前沒碰過API,著實消化了一段 時間。再請問您一個關鍵問題,function QueryCompStr傳回了這個值,我 還是看不懂這個值是什麼。可以再給我說明一下嗎?那是不是我把這個值 丟給memo之類的東西就行了?再次謝謝你! --- 從問中學 ^^給人叫前輩…怪怪的… 這是使用的例子 因為最近要做的事差不多 才會特別的研究 用 "的" 去試有 3 種拼法 用 "一" 去試只有 1 種拼法-不像倚天有三種 算是互相幫忙吧 var iHandleCount: integer; pList: array[1..nHKL_LIST] of HKL; szImeName: array[0..254] of char; i: integer; sFound: string; begin lstComposition.Items.Clear; // 取得目前系統已安裝輸入法之各個鍵盤配置(Keyboard Layout) iHandleCount := GetKeyboardLayoutList(nHKL_LIST, pList); for i := 1 to iHandleCount do begin if ImmEscape(pList[i], 0, IME_ESC_IME_NAME, @szImeName) > 0 then ^^^^pList 應該是 chajei.ime 等… begin sFound := QueryCompStr(pList[i], edtExam.Text); if sFound <> '' then lstComposition.Items.Add(StrPas(szImeName) ': ' sFound); end; end; http://www.microsoft.com/globaldev/reference/WinCP.mspx 微軟的 globaldev |
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
|
s8556026
一般會員 發表:10 回覆:43 積分:15 註冊:2003-07-26 發送簡訊給我 |
引言: s8556026前輩: 最近想了很久,搞不好還不用那麼麻煩。如果只是要Unicode版的拼音對照表,是不是可以拿錢達智前輩的範例,選擇所需要的輸入法,再將漢字這個區段的Unicode字丟進去再輸出就行了呢?那我怎麼從plist[i]知道輸入法的名稱? --- 從問中學 ^^HI~ 不要再叫我前輩囉 當然啦…我是用他的程式改來的… 輸入法的名稱...他的程式裡也有喔 Valid hi bytes is 0xA1 ~ 0xFE Valid low bytes is 0x40 ~ 0x7E, 0xA1 ~ 0xFE 幾乎可以輸出所有的常用字 參考… http://www.microsoft.com/globaldev/reference/WinCP.mspx |
chris
一般會員 發表:1 回覆:10 積分:2 註冊:2002-09-13 發送簡訊給我 |
|
chris
一般會員 發表:1 回覆:10 積分:2 註冊:2002-09-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |