unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, System.Types,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// 半角转全角的函数 20200110 更新修正
function HalfToFull(InputStr: String): String;
var
TmpChar: Char;
i: Integer;
begin
for i := 1 to Length(InputStr) do
begin
TmpChar := InputStr[i];
if (Ord(TmpChar) = 13) and (Ord(InputStr[i + 1]) = 10) or
(Ord(TmpChar) = 10) and (Ord(InputStr[i - 1]) = 13)
then
begin
Continue;
end;
if (Ord(TmpChar) = 32) then
begin
InputStr[i] := Char(12288); // ' '
Continue;
end;
if (Ord(TmpChar) = 46) then
begin
InputStr[i] := Char(12290); // '.'
Continue;
end;
if (Ord(TmpChar) < 127) then // 其它ASCII字符
begin
InputStr[i] := Char(Ord(TmpChar) + 65248);
end;
end;
Result := InputStr;
end;
// 全角转半角的函数
function FullToHalf(InputStr: String): String;
var
TmpChar: Char;
i: Integer;
begin
for i := 1 to Length(InputStr) do
begin
TmpChar := InputStr[i];
if (Ord(TmpChar) = 13) and (Ord(InputStr[i + 1]) = 10) or
(Ord(TmpChar) = 10) and (Ord(InputStr[i - 1]) = 13)
then
begin
Continue;
end;
if (Ord(TmpChar) = 12288) then
begin
InputStr[i] := Char(32); // ' '
Continue;
end;
if (Ord(TmpChar) = 12290) then
begin
InputStr[i] := Char(46); // '.'
Continue;
end;
if (Ord(TmpChar) > 65280) and (Ord(TmpChar) < 65375) then // 其它字符
begin
InputStr[i] := Char(Ord(TmpChar) - 65248);
end;
end;
Result := InputStr;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Text := FullToHalf(Memo1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Text := HalfToFull(Memo2.Text);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
end.