−トップへ−

エディットコンポーネント

 エディットコンポーネントは,プログラム実行中に文字を入力できるコンポーネントです。フォームにエディットコンポーネントを貼り付け,実行するだけで自由に文字を入力できます。
 このエディットコンポーネントのプロパティを見てみると,[left][top][width][height]などがあるので,位置や大きさを変えられます。しかしこの中で,[height]だけは変更しようとしても,変更できません。これは,フォントの大きさが関係しているのでフォントを大きくすれば,[heiht]の大きさが変わります。もし,フォントの大きさに関係なく[heiht]を変えたい場合は,プロパティの中の[autosize]のチェックを外すことで可能になります。
 エディットコンポーネントを貼り付けたときには,「Edit1」と表記されていますが,これを消したいときは,プロパティの中の[text]の欄を空欄にすれば消えます。
 またエディットコンポーネントの文字列は左詰めになっていますが,これを右詰めにしたいときは,プロパティの中の[BidiMode]を[bdRightToLeft]にすれば右詰めになります。
 左の図は,Edit1とEdit2を貼り付け,Edit2の[BidiMode]を[bdRightToLeft]に変えたものです。




エディットコンポーネントのイベント

 エディットコンポーネントは文字を入力するためのものなので,イベントを発生させることはあまりありません。
 しかし,今回はキーを押したときに発生するイベントを使って,数字だけ表示させるようにしたいと思います。
 まずは,フォームにエディットコンポーネントを貼り付けて,[OnKeyPress]イベントを呼び出してください。次に下記のように記述してみてください。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if not (key in ['0'..'9']) then
    key:=#0;
end;

 これは,押されたキーが,0から9以外なら,押されたキーを無効にする,という処理を表します。
 これを実行すると,数字以外のキーを押しても表示されなくなります。しかしこの場合の問題点として,[BackSpace]キーも無効にされてしまいます。[Delete]キーは普通に作動するので原因は不明です。
 そこが気になったので,次のように改良してみました。

 Edit3の[OnKeyDown]イベントを呼び出し,以下のように記述してみてください。

procedure TForm1.Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState );
var
  str:string;
begin
  if key=VK_back then begin
    str:=edit3.text;
    delete(str,length(str),1);
    edit3.text:=str;
    Edit3.SelStart := length(str);
  end;
end;

 実は,上記のコードを作成して[実行]すると,エラーが出てしまいます。原因は「VK_back」という言葉です。これは[BackSpace]キーのことですが,このままでは認識してくれません。認識させるには,次の作業を行います。

コードエディタの上の方に,次の文字列があります。

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

 この最後に「LCLType」を追加して,下のようにしてください。

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, LCLType;

 これで,[VK_back]という言葉が認識されるようになり,[実行]できます。

 これらはわかりにくいので,ファイルを添付します。よければダウンロードしてみてください。
→ダウンロード

−トップへ−