AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
08:フォームとコンポーネント(3)
 
イベントとイベントハンドラ
フォーム Form1画面にボタンを配置したら、そのボタンを押した時に何かをしたい!と思われる事でしょう。その「ボタンを押した」という動作をイベントと呼び、ボタンを押した時の処理内容をイベントハンドラと呼びます。
 
Delphiでボタン Button1オブジェクトを選択します。

オブジェクトインスペクタ画面で、ボタン Button1 オブジェクトの「イベント」ページに切り替えます。

「ボタンを押した」=「ボタンをクリックした」というイベントは「OnClick」になります。
 
「OnClick」の入力欄でダブルクリックすると自動的に「Button1Click」という文字が入り、コードエディタ画面に
procedure TForm1.Button1Click(Sender: TObject);
begin
 
end;
というプログラムコードが追加されます。この「begin」と「end;」の中に必要なプログラムコードを自分で記述します。


コードエディタ画面で
// [ボタンを押した時]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := 'ボタンを押したよ' ;
end;
と記述します。

メニュー「ファイル」→「すべて保存」をクリックして下さい。
 
このメニューは、このプログラムでの、プログラムファイル・プロジェクトファイルのうち修正されたファイルだけを全て保存します。このメニューは既に1度作成保存したプログラムを修正して再度保存する際に利用できます。

プログラムのコンパイルを行います。
メニュー「プロジェクト」→「test1 を再構築」をクリックして下さい。(コンパイルでも構いません)
 
※コンパイル、実行を行う前には必ず「保存」するようにしましょう。保存していないと、Delphiの調子がおかしくなったりした場合、Delphiを強制終了させたりするとせっかく作ったプログラムが失われてしまいます。

プログラムのコンパイル(再構築)を行うと、その経過・結果を示す画面が表示されます。[OK]ボタンをクリックして下さい。
もしエラーがある場合にはその旨を表示しコンパイルは完了しません。

コンパイル(再構築)が正常終了したら、出来上がったアプリケーション・プログラムを実行してみて下さい。
メニュー「実行」→「実行」をクリックして下さい。

作成した「TEST」プログラムが実行されます。
[押して!]ボタンをマウスクリックして下さい。
 
画面の右上にある[×]ボタンをクリックすると終了されます。

「押して!」ボタン Button1オブジェクトをクリックすると、Button1のクリックイベント「OnClick」が発生し、そのイベントハンドラ「Button1Click(〜)」が実行されます。つまり、
Label1.Caption := 'ボタンを押したよ' ;
が実行されます。
オブジェクトインスペクタ画面でLabel1オブジェクトの Captionプロパティをデザイン時に変更していましたが、このようにイベントハンドラ内に記述する事によって実行時に変更する事も出来ます。
 
「:=」は、代入する事を示し、メッセージ文字列は引用符(シングルクォーテーション「'」)で囲みます。実行文の最後にはセミコロン「;」を付けます。※セミコロンは実行文と実行文を区分する間に付加します。ですので最後の文には別段必要ありません。

次に、ボタンを3つ追加してみます。左図のように配置してみました。
 
オブジェクトインスペクタ画面で、配置したButton2、Button3、Button4の各オブジェクトの Captionプロパティを、
「A (&A)」「B (&B)」「閉じる (&C)」
とします。

オブジェクトインスペクタ画面で Button1オブジェクトの Defaultプロパティを「True」にします。
 
このプロパティは、プログラムを実行した際、この画面で[Enter]キーを押した時にクリックイベントを発生させる事が出来ます。
いわゆる「デフォルトボタン」となります。

オブジェクトインスペクタ画面で Button4オブジェクトの Cancelプロパティを「True」にします。
 
このプロパティは、プログラムを実行した際、この画面で[Esc]キー([Escape]キー)を押した時にクリックイベントを発生させる事が出来ます。
いわゆる「キャンセルボタン」となります。

オブジェクトインスペクタ画面のイベントページで Button2オブジェクトの OnClick欄でダブルクリックし「Button2Click」と表示させます。コードエディタ画面にそのプログラムコードが追加されます。
 
同様に、Button3、Button4オブジェクトも同様に行います。

コードエディタ画面で
// [A]
procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Caption := 'A' ;
end;
 
// [B]
procedure TForm1.Button3Click(Sender: TObject);
begin
  Label1.Caption := 'B' ;
end;
 
// [閉じる]
procedure TForm1.Button4Click(Sender: TObject);
begin
  close ;
end;
と追加記述します。

メニュー「ファイル」→「すべて保存」をクリックして下さい。
 
プログラムのコンパイルを行います。メニュー「プロジェクト」→「test1 を再構築」をクリックして下さい。
 
コンパイル(再構築)が正常終了したら、出来上がったアプリケーション・プログラムを実行してみて下さい。
メニュー「実行」→「実行」をクリックして下さい。

[Tab]キーを押すと、ボタンの内側に表示されている灰色の点線が次のボタンへ移動します。[Shift]キーを押しながら[Tab]キーを押すと([Shift]+[Tab]キーを押すと)戻ります。
その灰色の点線を「フォーカス」と呼び、フォーカスが当たっているボタンで空白キー(スペースキー)を押すと、そのボタンのクリックイベントを発生させる事が出来ます。
 
※ボタンオブジェクトの場合は、矢印キーを押す事でもフォーカス移動されます。
 
オブジェクトにフォーカスが入ってきた時には「OnEnter」イベントが発生されます。また、オブジェクトからフォーカスが出ていった時には「OnExit」イベントが発生されます。
 
プログラム内で「このオブジェクトにフォーカスを移動したい」という事を行う場合には、
(オブジェクト).SetFocus;
で可能です。
例:Button3.SetFocus;







フォーカス移動の順番は、オブジェクトインスペクタ画面でそのオブジェクトの TabOrderプロパティで指定する事が出来ます。
0、1、2、・・・と番号付けをします。
[Tab]キーでフォーカス移動をさせたくない場合には、TabStopプロパティを「False」にする事で可能です。

Captionプロパティに「A (&A)」のように、記号「&」を付けた文字には下線が付加されます。
プログラムを実行した際、この画面で[Alt]キーと一緒にその文字のキー(この場合は[A]キー)を押すとクリックイベントを発生させる事が出来ます。

Windowsはマウスでの操作が主体になりますが、キーボードでの操作もできるように作成しておくのが通例です。仮にマウスが突然使えなくなった場合でも、プログラムを操作し続ける事が出来る柔軟性が必要です。

オブジェクトインスペクタ画面でVisibleプロパティを「False」にすると、プログラム実行時、そのオブジェクトを画面に見せないようにする事が出来ます。
 
画面には見えませんので、フォーカス移動も行われませんし、イベントも発生されません。

オブジェクトインスペクタ画面でEnabledプロパティを「False」にすると、プログラム実行時、そのオブジェクトを灰色表示させて何も出来ないようにする事が出来ます。
 
灰色表示されてアクセス出来ませんので、フォーカス移動も行われませんし、イベントも発生されません。
何らかのイベントハンドラ内で、状況によって通常表示されるようにしたり、灰色表示させたり、という事が可能です。
(オブジェクト).Enabled := True ;
(オブジェクト).Enabled := False ;

Button2オブジェクトのVisibleプロパティを「False」に、Button3オブジェクトのEnabledプロパティを「False」にして実行してみました。
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
 01 02 03 04
 05 06 07 08
 09 10 11 12
 13 14 15 16
 17 18 19 20
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.