線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2245
推到 Plurk!
推到 Facebook!

如何取得中文字的注音首碼?

尚未結案
karopi
一般會員


發表:10
回覆:33
積分:8
註冊:2004-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-07 11:23:06 IP:218.169.xxx.xxx 未訂閱
假設有一中文詞彙為"板橋" 有沒有函數可以秀出其注音首碼為" ㄅㄑ"? 謝謝諸位大德
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-07 19:52:26 IP:211.162.xxx.xxx 未訂閱
Hi,karopi,您好! 參考一下下面這篇,或許會有所啓發 >人生在勤,不索何獲 <>業精於勤荒於嬉,行成於思毀於隨 <>臨淵羡魚不如退而結網
------
人生在勤,不索何获?
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-08 00:46:05 IP:61.62.xxx.xxx 未訂閱
karopi 您好,請參考小弟的範例    【Delphi】【發表】中文查碼程式(Source Code) 第二版  http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26983    【Delphi】【發表】注音表範例,輸入中文字,找出所有注音(Source Code) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26971    
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-08 04:08:26 IP:221.169.xxx.xxx 未訂閱
karopi:
是的,大部份都介紹Delphi的程式,但我因業務需要我硬是翻Delphi為
Builder C  的程式,以下的程式完全以C  完成,我相信比較符合你的需求,
並請注意紅字部分它可以對映出鍵盤英數字的第一碼,請參考!
以下為完整程式。我似乎應該放置創作發表區才是才怪!這也是翻> key=""
            s="" > 1)        {
//           s=s.SubString(1,2);
//                key =KeyBoard_In(s);   // 此為對應鍵盤英數字
            key =s.SubString(1,2);         // 此為注音首字        
            }        
      }
      else
         key =(char) str_[k];        // 非中文字
   }        
   return (key);
}
//---------------------------------------------------------------------------
AnsiString __fastcall TForm1::ChineseComp(AnsiString Chinese_Str)
{
  int iHandleCount;
  int nHKL_LIST = 20;
  HKL pList[20];
  AnsiString sFound="";
  char szImeName[254];
  StrPCopy(szImeName,'\0');
  iHandleCount = GetKeyboardLayoutList(nHKL_LIST, pList);
  for (int i=0;i 0) {
      sFound = QueryCompStr(pList[i], Chinese_Str);
      if ( StrPas(szImeName).Pos("注音") >0 ) {
        i =iHandleCount;
      }
    }
  }
//  Label1->Caption=sFound; 
  return sFound;  // 傳回注音
}
//---------------------------------------------------------------------------
AnsiString __fastcall TForm1::QueryCompStr( HKL hKB,AnsiString sChinese )
{
  DWORD dwGCL;
  LPCANDIDATELIST szBuffer;
  int iMaxKey, iStart;
  AnsiString Result="";
  iMaxKey = ImmEscape(hKB, 0, IME_ESC_MAX_KEY, NULL);
  if (iMaxKey <= 0)
    return Result;
  // 看看這個輸入法是否支援 Reverse Conversion 功能
  // 同時, 偵測需要多大的空間容納取得的資訊
  // comment: 下次修改時可以改成動態配置記憶體的方式
  dwGCL = ImmGetConversionList(
    hKB,
    0,
    sChinese.c_str(),
    NULL,
    0,
    GCL_REVERSECONVERSION);
  if (dwGCL <= 0 ) // 該輸入法不支援 Reverse Conversion 功能
    return Result;
  szBuffer=(LPCANDIDATELIST)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwGCL);
  // 取得組字字根資訊, dwGCL 的值必須以上次呼叫 ImmGetConversionList
  // 傳回值代入
  dwGCL = ImmGetConversionList(
    hKB,
    0,
    sChinese.c_str(),
    szBuffer,
    dwGCL,
    GCL_REVERSECONVERSION);
  Label4->Caption=dwGCL;
  if (dwGCL > 0 ) {
    iStart = szBuffer->dwCount;
    Label3->Caption=iStart;
    for (int i=0;i < iStart ;i  )
      Result =(char*)szBuffer   szBuffer->dwOffset[i];
  }
  HeapFree(GetProcessHeap(), 0, szBuffer);
  return Result;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TForm1::KeyBoard_In(AnsiString Str)
{
  AnsiString key="";   // Return 值
  char str[2];
  StrPCopy(str,Str);
  if (str[0] == -93)  {
    switch (str[1]) {
        case 116:      // ㄅ
          key="1";
        break;
        case 117:      // ㄆ
          key="Q";
        break;
        case 118:      // ㄇ
          key="A";
        break;
        case 119:      // ㄈ
          key="Z";
        break;
        case 120:      // ㄉ
          key="2";
        break;
        case 121:      // ㄊ
          key="W";
        break;
        case 122:      // ㄋ
          key="S";
        break;
        case 123:      // ㄌ
          key="X";
        break;
        case 124:      // ㄍ
          key="E";
        break;
        case 125:      // ㄎ
          key="D";
        break;
        case 126:      // ㄏ
          key="C";
        break;
        case -95:      // ㄐ
          key="R";
        break;
        case -94:      // ㄑ
          key="F";
        break;
        case -93:      // ㄒ
          key="V";
        break;
        case -92:      // ㄓ
          key="5";
        break;
        case -91:      // ㄔ
          key="T";
        break;
        case -90:      // ㄕ
          key="G";
        break;
        case -89:      // ㄖ
          key="B";
        break;
        case -88:      // ㄗ
          key="Y";
        break;
        case -87:      // ㄘ
          key="H";
        break;
        case -86:      // ㄙ
          key="N";
        break;
        case -72:      // ㄧ
          key="U";
        break;
        case -71:      // ㄨ
          key="J";
        break;
        case -70:      // ㄩ
          key="M";
        break;
        case -85:      // ㄚ
          key="8";
        break;
        case -84:      // ㄛ
          key="I";
        break;
        case -83:      // ㄜ
          key="K";
        break;
        case -82:      // ㄝ
          key=",";
        break;
        case -81:      // ㄞ
          key="9";
        break;
        case -80:      // ㄟ
          key="O";
        break;
        case -79:      // ㄠ
          key="L";
        break;
        case -78:      // ㄟ
          key=".";
        break;
        case -77:      // ㄠ
          key="0";
        break;
        case -76:      // ㄡ
          key="P";
        break;
        case -75:      // ㄢ
          key=";";
        break;
        case -74:      // ㄣ
          key="/";
        break;
        case -73:      // ㄦ
          key="-";
        break;
        default:
          key="";
        break;
    }
  }        
  return (key);
}
Andy Chang 發表人 - andychang1690 於 2004/09/08 04:15:19
------
Andy Chang
karopi
一般會員


發表:10
回覆:33
積分:8
註冊:2004-07-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-09 10:57:00 IP:218.169.xxx.xxx 未訂閱
原來這些文章都是在Delphi下 難怪會找不到 不過我對Delphi一竅不通 看了也是不懂 還是謝謝bigdogchina,ddy提供鏈節 更要謝謝andychang1690無私提供程式碼 還改寫成BCB的版本 實在太謝謝了
系統時間:2024-04-26 6:18:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!