Delphi 04

Object Pascalの基本

サンプルプロジェクト1−8

  1. ラジオグループ1を選択RadioGroup1のプログラム
  2. procedure TForm1.RadioGroup1Click(Sender: TObject);
    var
       Chk : Integer;
    begin
       Chk := RadioGroup1.ItemIndex;   {選択されたラジオボタンを取得}
       case Chk of
       0: Gakka := '英文学科';
       1: Gakka := '経済学科';
       2: Gakka := '経営情報学科';
       else
          Gakka := '社会福祉学部';
       end;
    end;
    
  3. ラジオボタンの選択状態を調べる
    • 個々のラジオボタンでは, それぞれのCheckedプロパティの値がTrueであれば,チェックオンであり, Falseであればチェックオフの状態である.
    • ラジオグループにはCheckedプロパティがなく, 代りにItemIndexの値でグループのどのラジオボタン がチェックオン(1つだけ選択可能)であるかが分かる.
  4. チェックボックスの選択状態を調べる
  5. それぞれのCheckedプロパティの値がTrueであれば,チェックオンであり, Falseであればチェックオフの状態である.(個々のラジオボタンと同じ)
  6. CheckBox1 からCheckBox* について,それぞれ Checked の値を調べ,それが True であれば,対応する科目名を取得し,科目名を記憶する変数に追加し,科目数をカウントする必要がある.
  7.    if CheckBox5.Checked then
          begin   Kamoku := Kamoku + '情報処理U';
                  Num := Num + 1;
          end;
    
  8. これを各CheckBox* のイベントハンドラとして別々に書いても悪くはないが,今回はユーザ定義のプロシージャ "SubjectName(...)" を一つ記述して共通に利用できるようにする.
  9. {ユーザ定義の手続き,Name1にNameを文字列として連結する}
    procedure TForm1.SubjectName(Name:String; var Name1:String; var N1:Integer);
    begin
         Name1 := Name1 + Name;  {文字列の連結}
         N1 := N1 + 1;           {連結回数のカウント}
    end;
    
  10. 値パラメータと変数パラメータ
    • 仮パラメータNameは, 値パラメータとして宣言されている. 呼び出し側からは科目名を与える.
    • 仮パラメータName1とN1は, 変数パラメータとして宣言されている. 呼び出し側からはそれぞれ”呼び出す直前までに”選択した科目名のリストと科目数を与える.
    • テキストp.86−p.90を参照せよ

  11. ユーザ定義プロシージャの宣言
  12.     { Public 宣言 }
        procedure SubjectName(Name:String;
                  var Name1:String; var N1:Integer); {ユーザ定義手続き}
    
  13. Public属性の位置にSubjectNameを宣言している. 仮パラメータについても宣言する必要がある.
  14. テキストp.94−p.96を参照せよ

  15. 確認ボタンのイベントハンドラButton1のプログラム

  16. 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;
    
  17. 個々のCheckBoxに関する処理はユーザ定義プロシージャのSubjectNameを利用して行なっている. 結果は変数KamokuとNumに反映される. これらはグローバル変数として宣言する.
  18. 選択した科目数をKamokuの先頭に追加してからラベル1に表示している.
  19. ここで RadioGroup1Click(Sender) を呼び出しているのは, 最初 Gakka が空白になるのを防ぐためである. 確認ボタンをクリックしても,どれかラジオボタンがクリックされるまで Gakka が空白のままなので, 念のためRadioGroup1がクリックされたことにしておく.

  20. グローバル変数の宣言
  21. 変数 Gakka, Kamoku, Num, はForm1内のグローバル変数として宣言する
  22. implementation
    {$R *.DFM}
    var
       Gakka, Kamoku : String;
       Num : Integer;
    

  23. クリアボタンButton2のプログラム

  24. クリアするとは, 選択された科目名のリストに空白文字['']を, 科目数にゼロ[0]を代入すること, 更に, Button1とLabel1のCaptionプロパティの値を初期状態に戻すことである.
  25. クリアボタンを起動して、次のようにプログラムを記述する。
    procedure TForm1.Button2Click(Sender: TObject);
    begin
         Num := 0;
         Kamoku := '';
         Button1.Caption := '選択データの確認';
         Label1.Caption := '確認ボタンをクリックして下さい';
    end;
    


1998/07/02 T.Katayama