MainFrm.pas
上传用户:nvosite88
上传日期:2020-10-14
资源大小:3k
文件大小:2k
源码类别:

输入法编程

开发平台:

Delphi

  1. unit MainFrm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   StdCtrls;
  6. type
  7.   TMainForm = class(TForm)
  8.     ChineseEdt: TEdit;
  9.     PYEdt: TEdit;
  10.     btnConvert: TButton;
  11.     Label1: TLabel;
  12.     Label2: TLabel;
  13.     Label3: TLabel;
  14.     Label4: TLabel;
  15.     Label5: TLabel;
  16.     Label6: TLabel;
  17.     procedure btnConvertClick(Sender: TObject);
  18.   private
  19.     { Private declarations }
  20.   public
  21.     { Public declarations }
  22.   end;
  23. var
  24.   MainForm: TMainForm;
  25. implementation
  26. {$R *.DFM}
  27. // 获取指定汉字的拼音索引字母,如:“汉”的索引字母是“H”
  28. function GetPYIndexChar( hzchar:string):char;
  29. begin
  30.   case WORD(hzchar[1]) shl 8 + WORD(hzchar[2]) of
  31.     $B0A1..$B0C4 : result := 'A';
  32.     $B0C5..$B2C0 : result := 'B';
  33.     $B2C1..$B4ED : result := 'C';
  34.     $B4EE..$B6E9 : result := 'D';
  35.     $B6EA..$B7A1 : result := 'E';
  36.     $B7A2..$B8C0 : result := 'F';
  37.     $B8C1..$B9FD : result := 'G';
  38.     $B9FE..$BBF6 : result := 'H';
  39.     $BBF7..$BFA5 : result := 'J';
  40.     $BFA6..$C0AB : result := 'K';
  41.     $C0AC..$C2E7 : result := 'L';
  42.     $C2E8..$C4C2 : result := 'M';
  43.     $C4C3..$C5B5 : result := 'N';
  44.     $C5B6..$C5BD : result := 'O';
  45.     $C5BE..$C6D9 : result := 'P';
  46.     $C6DA..$C8BA : result := 'Q';
  47.     $C8BB..$C8F5 : result := 'R';
  48.     $C8F6..$CBF9 : result := 'S';
  49.     $CBFA..$CDD9 : result := 'T';
  50.     $CDDA..$CEF3 : result := 'W';
  51.     $CEF4..$D188 : result := 'X';
  52.     $D1B9..$D4D0 : result := 'Y';
  53.     $D4D1..$D7F9 : result := 'Z';
  54.   else
  55.     result := char(32);
  56.   end;
  57. end;
  58. procedure TMainForm.btnConvertClick(Sender: TObject);
  59. var
  60.   I: Integer;
  61.   PY: string;
  62.   s: string;
  63. begin
  64.   s := '' ;
  65.   I := 1;
  66.   while I <= Length(ChineseEdt.Text) do
  67.   begin
  68.     PY := Copy(ChineseEdt.Text, I , 1);
  69.     if PY >= Chr(128) then
  70.     begin
  71.       Inc(I);
  72.       PY := PY + Copy(ChineseEdt.Text, I , 1);
  73.       s := s + GetPYIndexChar(PY);
  74.     end
  75.     else
  76.       s := s + PY;
  77.     Inc(I);
  78.   end;
  79.   PYEdt.Text := s;
  80. end;
  81. end.