 |
PCとASの文字列の取り扱いの違い
その2 |
 |
|
PCとASの文字列の違いを吸収するための処理について
TEditに入力される文字種を半角だけに制限したいと思います。
文字が入力されるとKeyDown、KeyPress、KeyUpイベントが発生します。
この中で文字の処理に一番適しているKeyPressを使って処理を行います。
具体的にはOnKeyPressイベントで半角文字以外の文字がメッセージとして流れてきたら無視してしまうといった方法をとります。
以下がそのサンプルコードになります。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Ord(Key) in [VK_BACK, VK_RETURN] then Exit;
if (IsDBCSLeadByte(BYTE(Key))) or (InDBCS) then
begin
Key := #0;
InDBCS := not InDBCS;
end;
end;
注意:このサンプルにはこのイベントハンドラ以外に、別途フォームにグロール変数(InDBCS: Boolean)が必要です。
このサンプルでは、IsDBCSLeadByteで全角文字の最初の1バイト目を判別し、フラグを立てて次に流れてくる2バイト目に備えています。
また、Key:=0で1バイト目2バイト目共に流れてきたキーを無効とすることで、結果として1バイト文字のみ入力可能としています。
|
 |