メニューをスキップして本文へ


ここから本文

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

  • 2005年3月10日(木) 22:05 JST
  • 投稿者:
  • 閲覧数
    3,413

半角文字と全角文字を区別する方法です。.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:
http://www.blackcatlab.com/trackback.php/ProgramingFAQ_del0052
表示形式
コメント投稿

サイト管理者はコメントに関する責任を負いません。

サブメニュー1をスキップしてサブメニュー2へ

ログイン

ログイン

あくせすかうんたぁ

テーマ変更

広告


ここからサブメニュー2

サブメニュー2をスキップしてフッタへ


ここからフッタ