以前、【基礎課題 1-10】で、下のようなフォームのプログラムを作りました。
このプログラムでは、
という2つの部分が必要です。
今回、このプログラムに、2. の機能をつけ加えてみましょう。
1. については、今回は考えません。項目の数は自分で数えることにします。
このプログラムを新しい名前で保存してから、下のようなフォームのプログラムに作り替えて下さい。
主なコンポーネントの Name プロパティは、次のようにして下さい。
コンポーネント | Name |
---|---|
ボタン「診断」 | ButtonShindan |
スピンエディット「チェック項目数」 | SpinEdit |
チェックボックス「6-10」 | CheckBoxHigh |
チェックボックス「0-5」 | CheckBoxLow |
エディット | EditMessage |
「チェック項目数」を入力してから「診断」ボタンを押したとき、
ようなプログラムを作りましょう。
ある条件が成り立っているか成り立っていないかによって行う内容が変わる場合には、「if 文」を用いて表します。
「診断」ボタンをクリックしたときのイベントハンドラを、次のように書いて下さい。
注意 面倒でも、半角スペース2字分ずつの「字下げ」を必ず行って下さい。構造が見やすくなります。
この命令は、下のような構造になっています。
if 条件:「チェック項目数」が6以上 then begin 条件が成り立っているときの処理1; 条件が成り立っているときの処理2; 条件が成り立っているときの処理3; ・ ・ ・ end else begin 条件が成り立っていないときの処理1; 条件が成り立っていないときの処理2; 条件が成り立っていないときの処理3; ・ ・ ・ end ; (← if 文の終わりを表す)
if 文は、条件が成り立っているか成り立っていないかによって、プログラムの流れを分岐させます。
条件は、
のどちらかしかありません。したがって、プログラムは、
のどちらかひとつを必ず実行し、かつ、いずれかひとつしか実行しません。
数学表記 | 意味 | Delphi での表記 |
---|---|---|
A>B | A は B より大きい | A > B |
A≧B | A は B 以上 | A >= B |
A=B | A は B に等しい | A = B |
A≦B | A は B 以下 | A <= B |
A<B | A は B より小さい | A < B |
A≠B | A は B に等しくない | A <> B |
次のようなフォームを持つプログラムを作って下さい。
主なコンポーネントの Name プロパティは、次のようにして下さい。
コンポーネント名 | Name |
---|---|
スピンエディット | SpinEditNenrei |
ボタン「入力完了」 | ButtonKanryo |
上のエディット | Edit1 |
下のエディット | Edit2 |
年齢を入力してから「入力完了」ボタンを押すと、 | 2つのメッセージが表示される。 |
![]() |
![]() |
年齢とメッセージの対応は、次の表にしたがってください。
年齢 | メッセージ |
---|---|
20歳以上 | あなたは成年ですね。あなたには選挙権があります。 |
19歳以下 | あなたは未成年ですね。あなたには選挙権がありません。 |
下の下線部を埋めて、プログラムを完成させて下さい。
procedure TForm1.ButtonKanryoClick(Sender: TObject); begin if SpinEditNenrei.Value then begin end else begin end ;
新しいコンポーネント「ラジオボタン」の使い方を覚えましょう。
コンポーネントパレットからラジオボタンのアイコンを選んで、フォーム上に3つ貼って下さい。
このままの状態でプログラムを実行して、ラジオボタンをクリックして下さい。
ラジオボタンはどういうはたらきをするコンポーネントか、下に書いて下さい。
オブジェクトインスペクタから3つあるラジオボタンのうちのいずれかを選んで、その
Checked プロパティの値を True や False
に変えてみましょう。何が起こりますか?
次のようなフォームを持つプログラムを作って下さい。
実は、一つのラベルに複数行のメッセージを表示させることもできます。それには、ラベルコンポーネントの「WordWrap」プロパティを「True」にすればよいのです。こうすると、指定したラベルコンポーネントの幅にメッセージが収まりきれない場合、自動的に折り返されます。つまり、ラベル幅に収まるように複数行表示してくれます。
しかし、最初から2行に分けてメッセージを表示させたい場合は、2つのラベルを用いた方が便利です。プログラムの動作内容は以下の通りです。
実行してから性別をチェックしてボタンを押すと、 | 下のように2つのメッセージが表示される。 |
![]() |
![]() |
チェック項目とメッセージの対応は、次の表にしたがって下さい。
チェック項目 | メッセージ |
---|---|
女性 | あなたは女性ですね。右側の階段をお上り下さい。 |
男性 | あなたは男性ですね。左側の階段をお上り下さい。 |
次のようなフォームを持つプログラムを作って下さい。
コンポーネント名 | Name |
---|---|
ラジオボタン「女性」 | RdioButtonf |
ラジオボタン「男性」 | RdioButtonm |
ボタン「OK」 | ButtonOK |
チェックボックス「20歳以上」 | CheckBoxSeinen |
主なコンポーネントの Name プロパティは、上のようにして下さい。
注意 「SGUクラブ」は架空の団体ですが、もしかすると実在するかもしれません。
プログラムの動作内容は次の通りです。
性別と年齢をチェックしてから「OK」ボタンを押すと、 | 2つのメッセージが表示される。 |
![]() |
![]() |
性別・年齢の条件とメッセージの対応は、次の表にしたがってください。
性別・年齢 | メッセージ |
---|---|
女性で、かつ、20歳以上 | あなたは入会資格があります。どうぞお入り下さい。 |
それ以外 | あなたは入会資格がありません。残念ですがお帰り下さい。 |
注意 「女性で、かつ、20歳以上」つまり、
「RadioButtonf がチェックされていて、かつ、CheckBoxSeinen がチェックされている」ことを、
(RadioButtonf.Checked = True)
and
(CheckBoxSeinen.Checked = True)
のように and を用いて表します。
ここに、and の前後の条件文には、( )をつけることを忘れないで下さい (これは Delphi が採用している PASCAL 言語の文法規則なのです)。
下の枠内を埋めて、プログラムを完成させて下さい。
procedure TForm1.ButtonOKClick(Sender: TObject); begin if (RadioButtonf.Checked = True) and (CheckBoxSeinen.Checked = True) then begin end else begin end ;
注意 「かつ」ではなく「または」を表したいときは、or を使います。
例 「女性、または、20歳以上」のとき
(RadioButtonf.Checked = True)
or
(CheckBoxSeinen.Checked = True)
次のようなフォームを持つプログラムを作って下さい。
主なコンポーネントの Name プロパティは、次のようにして下さい。
コンポーネント名 | Name |
---|---|
スピンエディット | SpinEditNumber |
スピンエディットには0〜9までの数しか入りません。それ以外の数を入力できないように、MinValue プロパティと MaxValue プロパティの値を変更しておいて下さい。
ここで、プログラムを実行し、数を入力してから OK ボタンを押したとき、
ようなプログラムを作って下さい。
注意 スピンエディットに入力された値が4以上7以下であることを表すのに、
4 <= SpinEditNumber.Value <= 7
と書きたくなると思います。しかし、Delphi は、2つの不等号が同時に出てくる文を理解することができません。ですから、
(4 <= SpinEditNumber.Value)
and
(SpinEditNumber.Value <= 7)
のように、条件を()でふたつの部分に分けてから and でつなげて書く必要があります。
次のようなフォームを持つプログラムを作って下さい。
コンポーネントの Name プロパティは、次のようにして下さい。
コンポーネント名 | Name |
---|---|
スピンエディット | SpinEditNumber |
ボタン「判定」 | ButtonHantei |
エディット | EditMessage |
0以上の数を入力してボタンを押すと、「入力した数は0以上です。」と表示し、 | 0未満の数を入力してボタンを押すと、 「入力した数は0未満です。」と表示する。 |
![]() |
![]() |
「判定」ボタンを押したときの処理は、以下のように書くことができます。
しかし、then と else のあとに、それぞれ1つの処理しかしないときは、 begin と end を省略して、次のように書くこともできます。
if 文は
if 〜 then 処理1 else 処理2 ;
で一つの文なのです。そこで、例えば処理1の末尾に「;」をつけると、「そこで文が終わってしまい、そのあとに「else」から新たに文が始まる」、と認識されてしまいます。そしてそのような文はないのでエラーになってしまいます。
注意 市販のほとんどのテキストでは,処理文が1つの時には begin と end のない形を掲載しています。しかし、実際のプログラミングの場面では、最初は実行文が1つでも、後に文を加えて複数の文になることがよくあります。その様な場合には再び beginと end をつけ加えなければなりませんが、うっかり忘れてしまいやすいものです。そして、もし忘れるとエラーが発生したり思った通りの処理をしてくれなくなったりします。 そこで、処理する文が1つのときでも (begin と end がついていてもエラーになるわけではないので)、begin とend を消さずに残しておくようにすることを勧めます。