程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用Delphi 6編程實現自動標注漢語拼音

用Delphi 6編程實現自動標注漢語拼音

編輯:Delphi
用Delphi 6編程實現自動標注漢語拼音

  在使用電腦編輯文檔的時候,輸入漢語拼音再加上它的聲調,是一件令人頭痛的事情,特別對於那些經常接觸拼音的教師、家長和孩子。雖然 Office XP中已經加入了自動標注漢語拼音的功能,不過,Office XP要####.00元哦。對於沒有用上Office XP的人來說,難道就沒有辦法享受到這種便利嗎?好在我們學習了編程,就自己動手吧!

  這篇文章不僅僅是說明如何實現自動標注漢語拼音編程的,我的主要目的是演示解決問題的一般步驟。

  就本問題來說,你是不是有種不知如何下手的感覺?想一想我們在編寫漢字GB-BIG5相互轉化時的做法:把每一個漢字的GB碼、BIG5碼都列出來,並一一對應。我們可以仿照這種方法,把每一個漢字(至少6763 個!!!)對應的拼音都列出來,然後就可以查詢了。

  不過,我相信你和我一樣是懶惰的,懶惰的人通常會花費幾倍的時間去找個可以懶惰的辦法來。最懶惰的辦法是……撿個現成的!先到網上問問看,就選大富翁論壇吧。這裡不是大富翁游戲愛好者交流經驗的論壇,而是專門討論Delphi編程的地方,人氣也好。登錄http://www.Delphibbs. com,免費注個冊,問問看有沒有誰知道如何編,或者能提供個組件什麼的。記住要選郵件通知,如果有人回答問題,論壇會自動發郵件通知你,然後你就等著吧。

  閒著也是閒著,在等待的時候我們也該做點什麼。首先,應該想到 MSDN,它可是程序員必備的編程參考書(軟件)。在MSDN中輸入spell 或phoneticize查一下,看看有沒有我們想要的信息。你就沿著這條思路試試吧。

還可以想一想,我們以前使用電腦接觸到有拼音的地方。輸入法!對了,就是拼音輸入法!輸入拼音我們可以得到漢字。我們能不能通過一種逆運算,輸入漢字得到這個漢字的拼音?回答當然是肯定的,這也是本文推薦的方法。

這種方法實際上就是得到漢字的字根。我們仍然可以上論壇去詢問,到 MSDN中查找,不過問題要改為“如何得到漢字的字根”。不用說,你已經可以解決本問題了。實際上,此編程主要用到三個函數:

GetKeyboardLayoutList:得到當台計算機中存在的輸入法列表;

ImmEscape :得到輸入法的名稱;

ImmGetConversionList: 看看這個輸入法是否支持Reverse Conversion功能,如果支持則繼續使用此函數,可取得組字字根信息。

現在簡單了,打開Delphi 6,添加兩個TEdit控件、三個TBitBtn控件、一個TOpenDialog控件以及若干 Label控件以示說明,窗體設計如圖1所示。接著輸入下面的源代碼,編譯通過就可以使用了。主要的地方我已經加了注釋。在編譯之前,請確定你安裝了微軟拼音輸入法。

程序代碼如下:


unit Unit1;


interface


uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,


StdCtrls, ExtCtrls, Buttons, IMM;

type

TForm1 = class(TForm)

OpenDialog1: TOpenDialog;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

Edit2: TEdit;

Edit1: TEdit;

Label5: TLabel;

Label1: TLabel;

BitBtn1: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

public

iHan

dleCount: integer;

pList : array[1..20] of HKL;

szImeName : array[0..254] of char;

II : integer;

end;


const

pych: array[1..6,1..5] of string[2]=

(('ā', 'á','ǎ','à','a'),('ō', 'ó','ǒ','ò','o'),

('ē', 'é','ě','è','e'),('ī', 'í','ǐ','ì','i'),

('ū', 'ú','ǔ','ù','u'),('ǖ', 'ǘ','ǚ','ǜ','ü'));


var

Form1: TForm1;


implementation


{$R *.DFM}


procedure TForm1.FormCreate(Sender: TObject);

var

i: integer;

begin

II := 0;

//retrIEves the keyboard layout handles corresponding to the current set of input locales in the system.

iHandleCount := GetKeyboardLayoutList(20, pList);

for i := 1 to iHandleCount do

begin

if ImmEscape(pList[i], 0, IME_ESC_IME_NAME, @szImeName) %26gt; 0 then

if szImeName='微軟拼音輸入法' then

begin


StdCtrls, ExtCtrls, Buttons, IMM;

type

TForm1 = class(TForm)

OpenDialog1: TOpenDialog;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

Edit2: TEdit;

E

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved