あるイベントが発生した時に、特定のコードを実行させたい

例えば、フォーム(Form1)上をマウスでクリックした際に、「Hello world!」とメッセージを表示させたり、特定のキーを押した時にフォームの色を変えるなど、いろいろなイベントに対して特定のコードを実行させたいことがあります。そのような場合、どこにそのコードを書いたらよいのでしょうか。

Delphi では、一般的にイベントが発生した際に実行するコードを書くにはオブジェクトインスペクタのイベントページにあるイベントを使用してやります。

例えば、フォームをクリックすると、フォームの色を「青」に変更したいとします。その場合には図のように OnClick と記載されている右側の空白をダブルクリックしてみてください。

すると、以下のようにコードが自動生成されると思います。(コメントは除きます)

  // FormClick は、Form を Click したとき発生するイベントです。
  procedure TForm1.FormClick(Sender: TObject);
  begin
    // ここに書かれたコードが Form を Click した際に実行されます。
  end;

この begin と end; の間に書かれたコードが、フォームをクリックした時に、実行されることになります。それでは早速、例を見てみましょう。

  procedure TForm1.FormClick(Sender: TObject);
  begin
    Color := clBlue; // 色を青にします。
  end;

実行後、フォームをクリックしてみてください。フォームの色が青に変化したと思います。このように、あるイベントが発生したときに特定のコードを実行させたい場合には、一般的にオブジェクトインスペクタを用いてコードを入力することになります。

それでは、次にフォームにラベル(Label)とパネル(Panel)を貼り付けてください。(※ Panel は、Standard ページにあります。)今度は、パネルの上にマウスカーソルが乗っている間、ラベルにそのマウスカーソルの座標を表示させるようにして見ましょう。

図のようにしますと、以下のようにコードが自動生成されます。

  procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
  begin
  
  end;
  

Panel1MouseMove に注目してください。これは、Panel1 上で MouseMove (マウスが移動すると発生するイベント)が発生すると begin と end; の間に書かれたコードが実行されます。それでは、以下のように書いて下さい。

  procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
  begin
    // ラベルに座標を表示します。
    Label1.Caption := IntToStr(X) + ', ' + IntToStr(Y);
  end;
  

Panel1 上でマウスカーソルを移動させますと、ラベルにパネル上でのマウスカーソルの座標が表示されます。つまり、マウスカーソルをパネル上で動かすたびにイベントが発生していることが分かります。

代表的なイベントには以下のようなイベントがあります。

OnClick
クリックされる時に発生します。
OnDblClick
ダブルクリックされる時に発生します。
OnEnter
コンポーネントがフォーカスを持つ時に発生します。
OnExit
コンポーネントがフォーカスを失う時に発生します。
OnKeyDown
キーが押されると発生します。
OnMouseDown
マウスボタンが押されると発生します。
OnMouseMove
マウスを移動させると発生します。
OnMouseUp
マウスボタンを押した後、そのボタンを離すと発生します。

up next
Last update: 2002/9/30