dephi 程式輸入法中英文自動切換實現的原始碼 (轉)

worldblog發表於2007-12-07
dephi 程式輸入法中英文自動切換實現的原始碼 (轉)[@more@]

現在將公佈出來,來謝謝大家的支援。本人水平有限,大家有什麼號的靈感或建議,請 e  .多謝!!

原始碼實現的思路:

  提供一個列舉所有輸入法的窗體,供選擇,將選擇的中文輸入法儲存到系統登錄檔裡。

 提供一個方法 ChangeYouFormAllControlIme(form)  ,fo是需要輸入的窗體名稱,列舉出相應窗體具有輸入法的。

提供一個方法 JugeClassType(PClass:Tcontrol),判斷每一個控制元件的實際型別,根據其ImeMode(為了設計簡便,當值 為imchinese 時,切換為使用者選擇的中文輸入法 ,其它切換為英文)

下面是主要原始碼:

//判斷控制元件型別切換中英文這個只能具體判斷,無法用 Twincontrol 籠統判別或概括

procedure JugeClassType(PClass:Tcontrol;
begin
if pclass is TEdit then
 begin
  if TEdit(pclass).ImeMode=imchinese then
  TEdit(pclass).ImeName:=StrImeName (StrImeName  登錄檔儲存的中文輸入法名)同)
  else
  TEdit(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TMemo then
 begin
  if TMemo(pclass).ImeMode=imchinese then
  TMemo(pclass).ImeName:=StrImeName
  else
  TMemo(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TComboBox then
 begin
  if TComboBox(pclass).ImeMode=imchinese then
  TComboBox(pclass).ImeName:=StrImeName
  else
  TComboBox(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TRichEdit then
 begin
  if TRichEdit(pclass).ImeMode=imchinese then
  TRichEdit(pclass).ImeName:=StrImeName
  else
  TRichEdit(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TGrid then
 begin
  if TDBGrid(pclass).ImeMode=imchinese then
  TDBGrid(pclass).ImeName:=StrImeName
  else
  TDBGrid(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TDBEdit then
 begin
  if TDBEdit(pclass).ImeMode=imchinese then
  TDBEdit(pclass).ImeName:=StrImeName
  else
  TDBEdit(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TDbMemo then
 begin
  if TDbMemo(pclass).ImeMode=imchinese then
  TDbMemo(pclass).ImeName:=StrImeName
  else
  TDbMemo(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TDbcombobox then
 begin
  if TDbcombobox(pclass).ImeMode=imchinese then
  TDbcombobox(pclass).ImeName:=StrImeName
  else
  TDbcombobox(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is Tdblookupcombobox then
 begin
  if Tdblookupcombobox(pclass).ImeMode=imchinese then
  Tdblookupcombobox(pclass).ImeName:=StrImeName
  else
  Tdblookupcombobox(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is Tdbrichedit then
 begin
  if Tdbrichedit(pclass).ImeMode=imchinese then
  Tdbrichedit(pclass).ImeName:=StrImeName
  else
  Tdbrichedit(pclass).ImeMode:=imClose;
  exit;
 end;
if pclass is TMaskEdit then
 begin
  if TMaskEdit(pclass).ImeMode=imchinese then
  TMaskEdit(pclass).ImeName:=StrImeName
  else
  TMaskEdit(pclass).ImeMode:=imClose;
  exit;
 end;
end;

//這個方法,您只需要在需要切換中英文的窗體 oncreate 事件裡就可以了。YFormName,需要切換中英文的窗體。

Procedure ChangeYouFormAllControlIme(YFormName:TWinControl);
var
i:integer;
ChildControl:TControl;
Reg:TRegistry;
YouFormOrOTher:Twincontrol;
begin
YouFormOrOTher:=YFormName;
reg:=TRegistry.Create;
reg.Key:=HKEY_LOCAL_MACHINE;
try
 if Reg.OpenKey('SoftwareIMeCustom',false)=true then
  StrImeName:=reg.ReadString('CustomIMeName');
finally
 reg.CloseKey;
 reg.Free;
end;
for i:=0 to YouFormOrOTher.ControlCount-1 do
 begin
  ChildControl:=YouFormOrOTher.Controls[i];
  JugeClassType(ChildControl);
  if ChildControl is TWinControl then ChangeYouFormAllControlIme(ChildControl as TWinControl);
 end;
end;
end.

列舉輸入法,並將使用者的選擇儲存到登錄檔裡,很簡單,這個大家可以自己實現。例如

ListBox1.Items:=screen.Imes;

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-989633/,如需轉載,請註明出處,否則將追究法律責任。

相關文章