これを各CheckBox* のイベントハンドラとして別々に書いても悪くはないが,今回はユーザ定義のプロシージャ "SubjectName(...)" を一つ記述して共通に利用できるようにする.
{ユーザ定義の手続き,Name1にNameを文字列として連結する}
procedure TForm1.SubjectName(Name:String; var Name1:String; var N1:Integer);
begin
Name1 := Name1 + Name; {文字列の連結}
N1 := N1 + 1; {連結回数のカウント}
end;
値パラメータと変数パラメータ
- 仮パラメータNameは, 値パラメータとして宣言されている. 呼び出し側からは科目名を与える.
- 仮パラメータName1とN1は, 変数パラメータとして宣言されている. 呼び出し側からはそれぞれ”呼び出す直前までに”選択した科目名のリストと科目数を与える.
- テキストp.86−p.90を参照せよ
ユーザ定義プロシージャの宣言
{ Public 宣言 }
procedure SubjectName(Name:String;
var Name1:String; var N1:Integer); {ユーザ定義手続き}
Public属性の位置にSubjectNameを宣言している. 仮パラメータについても宣言する必要がある.
テキストp.94−p.96を参照せよ
確認ボタンのイベントハンドラButton1のプログラム
procedure TForm1.Button1Click(Sender: TObject);
begin
if CheckBox1.Checked then SubjectName('文学 ', Kamoku,Num);
if CheckBox2.Checked then SubjectName('法学 ', Kamoku,Num);
if CheckBox3.Checked then SubjectName('社会学 ', Kamoku,Num);
if CheckBox4.Checked then SubjectName('統計学 ', Kamoku,Num);
if CheckBox5.Checked then SubjectName('情報処理U ', Kamoku,Num);
if CheckBox6.Checked then SubjectName('文章表現 ', Kamoku,Num);
RadioGroup1Click(Sender);
Button1.Caption := Gakka;
Label1.Caption := IntToStr(Num) + '科目: ' + Kamoku;
end;
個々のCheckBoxに関する処理はユーザ定義プロシージャのSubjectNameを利用して行なっている. 結果は変数KamokuとNumに反映される. これらはグローバル変数として宣言する.
選択した科目数をKamokuの先頭に追加してからラベル1に表示している.
ここで RadioGroup1Click(Sender) を呼び出しているのは, 最初 Gakka が空白になるのを防ぐためである.
確認ボタンをクリックしても,どれかラジオボタンがクリックされるまで Gakka が空白のままなので, 念のためRadioGroup1がクリックされたことにしておく.
グローバル変数の宣言
変数 Gakka, Kamoku, Num, はForm1内のグローバル変数として宣言する
implementation
{$R *.DFM}
var
Gakka, Kamoku : String;
Num : Integer;
クリアボタンButton2のプログラム
クリアするとは, 選択された科目名のリストに空白文字['']を, 科目数にゼロ[0]を代入すること, 更に, Button1とLabel1のCaptionプロパティの値を初期状態に戻すことである.
クリアボタンを起動して、次のようにプログラムを記述する。
procedure TForm1.Button2Click(Sender: TObject);
begin
Num := 0;
Kamoku := '';
Button1.Caption := '選択データの確認';
Label1.Caption := '確認ボタンをクリックして下さい';
end;