記事カテゴリ

ユーザー機能


 2024年4月17日(水) 06:38 JST

[Delphi] 半角(SBCS)と全角(MBCS)を区別する (for VCL.Net)

  • 投稿者:
  • 表示回数
    13,001

半角文字と全角文字を区別する方法です。.Net環境ではDelphiもほかの言語と同じように Unicode になってしまったので、従来のような ByteType 関数による半角文字と全角文字の判定は行うことができません。
同じように、Win32 API のIsDBCSLeadByte などの API も使用できなくなっています。
(ここでは半角 = 1バイト文字、全角文字 = 2バイト以上の文字としています。2バイト半角文字もありますが、使用される頻度がほとんど無いため考慮の対象から除外しています。)
そこで、Unicodeの環境では、Shift-JIS(Windows環境ではコードページ932と定義されています)の形に変換してからチェックを行う必要があります。
以下は、エディットボックスに半角文字しか入力させないようにする例です。このコードを埋め込むには uses に System.Text を追加する必要があります。

procedure TForm5.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  VK_Z = 26;
var
  nByteSize: Integer;
begin
  if not (Ord(Key) in [VK_BACK, VK_RETURN, VK_Z]) then // 除外キー
  begin
    nByteSize := Encoding.GetEncoding(932).GetByteCount(String(Key));
    if (nByteSize <> 1) then Key := #0;
  end;
end;

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/ProgramingFAQ_del0052

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。