前回のプログラムでは、アンケートを1件入力してメッセージボックスを1つ表示しました。今回はアンケートを1件入力するたびに画面上に表示を加えるよう、書き換えるんだって。
まずはTurbo Delphiを起動して第3回のプログラムを開きます。プロジェクトの名前は「Profile.bdsproj」でしたね。あ、開き方を聞いておくのを忘れていました。
ホームページは、起動すると最初に表示される画面ね。右上に「最近のプロジェクト」欄があります。一覧を見てみると、「Profile.bdsproj」があったあった。クリックだけでプロジェクトが開くのね。この前作ったフォームが表示されました。
前回のプログラムでは、男性か女性か、ペットを飼っているかどうかでメッセージボックスの表示を切り替えるためにif文を使っています。
まずは、複雑になったif文をすっきりさせましょう。今回は「変数」というのを使うんだって。変な数ではなくて、変えられる値という意味だって言っていたけど、どんなものなのかな
高橋先生:「変数」は数値だけじゃなく文字など、様々なものを取っておく入れ物です。プログラムでは「この入れ物にはこんな名前を付けました。入れられるのはこんな種類です」と宣言しなくては使えません。 |
ナッキー:入れ物に名前を付けて宣言するの?「宣誓!」とか、言うのかな?さらに種類もあるのね。 |
高橋先生:宣言は、変数名とデータ型の名前を記述するだけです。データ型が、入れられる値の種類を示しているんだ。 |
ナッキー:型ってクッキー型とか? |
高橋先生:遠くないけど、ちょっと違うな。型抜きパズルが近いんじゃないかな。丸や星型のブロックを、穴の中に通す遊びです。形が違うと穴を通らなくて、形が同じだと穴を通り抜ける。データ型でも、データ型の種類と入れる変数の値の種類が同じでなければ入れられないのです。

図04 データ型 プロフィールの入力結果は文字列なので、文字列が入れられるデータ型を用意します。データ型の種類はたくさんあるけど、ここでは文字列型の1つ「string」というデータ型を使うよ。 次に宣言の方法を説明します。ここではイベントハンドラ内で使える変数を作ろう。 変数宣言を書く場所はイベントハンドラ内のbeginの前です。空白行を挿入して、先頭に「var」を入れます。varはインデントなしです。変数の宣言はvarの下からはじめます。varの下にはいくつ変数を記述してもかまいません。宣言の記述は var 変数名 :(コロン) 型名; 変数名 : 型名; となります。変数名の命名規則も一部紹介しましょう。 - 半角英数で、数字以外からはじめる。
- 同じイベントハンドラ内で重複する名前をつけない。
- 大文字小文字は区別されないので、「A」も「a」も同じ変数名とみなされる。
規則にしたがって、入力結果をまとめる変数を作ってください。 |
|
変数は宣言しなくちゃダメで、宣言には変数名とデータ型が必要。宣言を書く場所は「var」の後ろ。よし、これさえ覚えれば変数が使えてプログラミングの幅も広がるから、がんばらなくっちゃ。
では、入力結果を入れておく変数を宣言しましょう。変数名は「Profile_Data」にしておきます。ツールバーの[フォーム/ユニットの切り替え]ボタンなどを使って、画面表示をコードエディタに切り替えます。すでに記述しているButton1Clickイベントハンドラを見てください。「begin」の前に空白行を追加して変数宣言を追加します。
procedure TForm2.Button1Click(Sender: TObject);
var
Profile_Data : string;
begin
|
end;
これで「Profile_Data」変数に文字列が代入できるようになったわ。
高橋先生:じゃあ、次に変数に入力結果を代入していこう。全項目を変数に連結させてください。まずは1つ目の「名前」を変数に代入してみます。次に変数に対して新たな項目を連結してください。 前回記述したメッセージボックスに表示するためのif文は使わないから、「コメント」にしよう。コード上にプログラマのコメントを入れることができます。そのまま文字を書くとコンパイルの対象となって、エラーになってしまうよ。先頭に「//」を入れるか「{}」で囲もう。 //(スラッシュ・スラッシュ)は右側がコメント {}はカッコ内がコメント // ShowMessage(Edit1.Text + ':' + ComboBox1.Text); これで、「//」から右の一文はは実行されません。 |
|
では、前回のif文をコメントにしておきましょう。ここでは、「//」を使う方法を選択しました。Button1Clickイベントハンドラを表示して、// をいっぱい入力。それから、変数にEdit1の内容を代入するコード(太字の部分)を追加します。
procedure TForm2.Button1Click(Sender: TObject);
var
Profile_Data : string;
begin
// if RadioGroup1.ItemIndex = 0 then
// if CheckBox1.Checked then
// ShowMessage(Edit1.Text + ':' +
// ComboBox1.Text + ':' + '男性' +
// ':' + 'ペットを飼っている')
// else
// ShowMessage(Edit1.Text + ':' +
// ComboBox1.Text + ':' + '男性')
// else
// if CheckBox1.Checked then
// ShowMessage(Edit1.Text + ':' +
// ComboBox1.Text + ':' + '女性' +
// ':' + 'ペットを飼っている')
// else
// ShowMessage(Edit1.Text + ':' +
// ComboBox1.Text + ':' + '女性');
Profile_Data := Edit1.Text;
end;
次は変数に連結するのね。連結は「+」だったっけ。とすると「ComboBox1.Text + Profile_Data」となるのか。どこに代入すればいいのかな?教えて、高橋先生!
高橋先生:数学の感覚でコードを見ると変な感じがするけど、代入文だから「:=」だね。「:=」右側にも左側にも同じ変数やプロパティが登場することがあるよ。間を「:」で区切るから「':'」も一緒に連結してください。 それから連結の順番も大切です。「ComboBox1.Text + Profile_Data」とすると「住所名前:」ということになってしまうよ。このコードでは「Profile_Data + ':' + ComboBox1.Text」としてください。 同様にして「誕生日」以外のほかの項目も追加していきましょう。 |
|
「1 = 1 + 2」みたいで、ちょっと変な感じだけど「代入」は「計算」とは違うのね。こうやって変数を使うと、項目を1つ1つ代入できて文がわかりやすくなります。それに、「+」で連結すると後に追加される感じなんだ。順番を間違えないようにしようっと。コードはこうなるのかな?
procedure TForm2.Button1Click(Sender: TObject);
var
Profile_Data : string;
begin
Profile_Data := Edit1.Text;
Profile_Data := Profile_Data + ':' + ComboBox1.Text;
if RadioGroup1.ItemIndex = 0 then
Profile_Data := Profile_Data + ':' + '男性'
else
Profile_Data := Profile_Data + ':' + '女性';
if CheckBox1.Checked then
Profile_Data := Profile_Data + ':' + 'ペットを飼っている'
else
;
end;
あれ?「else」の続きが必要のないとき、どうするんだったかな?教えて、高橋先生!
高橋先生:条件を満たさない場合の処理がないとき、「else」以下全部を省略します。文末の「;(セミコロン)」を忘れないでください。 |
|
「else」はいらなかったんだ。では「ペットを飼っている」のチェックボックスの部分だけ書き換えます。「;(セミコロン)」を忘れずに。さっき入力した「Profile_Data := Edit1.Text;」の次から記述します。あ、下のコードは、コメントの部分は省略しちゃっています。太字の部分を追加します。
procedure TForm2.Button1Click(Sender: TObject);
var
Profile_Data : string;
begin
Profile_Data := Edit1.Text;
Profile_Data := Profile_Data + ':' + ComboBox1.Text;
if RadioGroup1.ItemIndex = 0 then
Profile_Data := Profile_Data + ':' + '男性'
else
Profile_Data := Profile_Data + ':' + '女性';
if CheckBox1.Checked then
Profile_Data := Profile_Data + ':' + 'ペットを飼っている';
end;