Comments
Transcript
Label,Edit,Memo,Button,ComboBox,MediaPlayer,Timer
岡本安晴 2001.1.7;2001.3.6 Object Pascal 入門 付録−7 コンポーネント: Label,Edit,Memo,Button,ComboBox,MediaPlayer,Timer A7 - 1 岡本安晴 2001.1.7;2001.3.6 A7 コンポーネント: Label,Edit,Memo,Button,ComboBox,MediaPlayer,Timer Delphi のコンポーネントパレットには、Windows でのインターフェースを容易にするため のコンポーネントが多数用意されている。 ここでは、数値計算、データ分析、あるいはシミュレーションにおいて基本的と思われる コンポーネントの幾つかについて、サンプルプログラムによって説明する。 サンプルプログラム PSamplea71.dpr は、 Label、 Edit、 Memo、 Button、 ComboBox、 MediaPlayer、 OpenDialog、Timer の各コンポーネントを使用するものである。プログラミング時のフォー ムは次のようになっている。 コンポーネント Label、Edit、Memo、Button、ComboBox は、コンポーネントパレットの Standard ページにある。 A7 - 2 岡本安晴 2001.1.7;2001.3.6 MediaPlayer と Timer コンポーネントは、System ページにある。 Timer MediaPlayer OpenDialog コンポーネントは、Dialogs ページにある。 プログラム PSamplea71.dpr を実行すると次のようなフォームが表示される。 OpenDialog と Timer コンポーネントは、実行時には表示されない。MediaPlayer は、プロ A7 - 3 岡本安晴 2001.1.7;2001.3.6 パティ Visible を false に設定して隠している。すなわち、プログラムの実行開始時、フ ォームがアクティブになるときに呼び出される FormActivate メソッドによって Visible プ ロパティを false に設定している。 var st : Longint = 0; // プログラムの実行状態を示す変数 procedure TForm1.FormActivate(Sender: TObject); begin if st = 0 then // 実行開始時のとき // 以後、実行開始時と判定されない begin st:=1; // 実行開始時に MediaPlayer を隠す MediaPlayer1.Visible:=false; end; end; Visible プロパティの設定は、変数 st の値のチェックにより、プログラムに実行開始時に 1回だけ行っている。 Label、Edit コンポーネント 上の Edit コンポーネントに文字列を設定して、Copy ボタンをクリックすると、下図のよ うに Label、下の方の Edit、Memo の各コンポーネントに文字列がコピーされる。 A7 - 4 岡本安晴 2001.1.7;2001.3.6 これは、次のプログラムによる。 procedure TForm1.CopyButtonClick(Sender: TObject); begin Edit2.Text:=Edit1.Text; Label1.Caption:=Edit1.Text; Display(Edit1.Text); Edit1.SetFocus; end; Edit コンポーネントに表示されている文字列は、Text プロパティへの読み書きでアクセス できる。Label コンポーネントに表示されている文字列は、Caption プロパティによってア クセスする。Label コンポーネントは表示専用であるが、Edit2 コンポーネントもプロパテ ィ ReadOnly を true に設定して表示専用としている。表示文字のフォントやその色は、Font プロパティで設定できる。この Font プロパティは、プログラミング時にオブジェクトイン スペクタによって設定することもできる。 Memo コンポーネント Memo コンポーネントへの表示は、手続き Diplay によって行っている。この手続きは、次の ようになっている。 A7 - 5 岡本安晴 2001.1.7;2001.3.6 procedure Display( s : string ); begin with Form1.Memo1.Lines do begin while count > 20 do Delete(0); // Memo 内の行数を 20 以下とする // 文字列 s を Memo に追加・表示 Add( s ); end; end; まず、count プロパティによって Memo コンポーネント中のリストの行数を数え、20行を 越えているときは Delete メソッドにより先頭の一番古い行を削除する。 文字列sの追加は、 メソッド Add によって行っている。 ComboBox コンポーネント ComboBox コンポーネントは、コンポーネントの右端のボタンをクリックして表示される 項目リストから項目を選んでクリックすることにより、選択された項目に対応した処理を 行うために用いている。 項目のクリックで呼び出される手続きは、次の ComboBox1Click メソッドである。 A7 - 6 岡本安晴 2001.1.7;2001.3.6 リスト A7.1 ComboBox1Click メソッド procedure TForm1.ComboBox1Click(Sender: TObject); begin case ComboBox1. ItemIndex of 0 : CopyButtonClick(Sender); // 1 : PlaySound; // 2 : Close; // else (* 何もせず *); end; end; コピー 音の再生 終了 選ばれた項目は、ItemIndex プロパティによって示される。1番上から順番に0,1、 ・・・ の順序値が与えられている。項目リストは、プログラミング時に設定することができる。 オブジェクトインスペクタにおいて ComboBox コンポーネントが表示されている(フォーム 上の ComboBox1 コンポーネントをクリックしてアクティブにする)ときに、Items プロパテ ィ欄の右端のボタンをクリックする。このとき表示される「文字列リストの設定」ダイア ログボックスで ComboBox の項目を設定することができる。表示されたダイアログボックス 内のエディタ画面に項目を設定して「OK」ボタンをクリックする。1行が1項目になる。 ダイアログボックスの「エディタ」ボタンをクリックすると、ダイアログボックスのエデ ィタ画面は、ユニットと同じ Delphi のエディタ画面のページに切り換わる。このときは、 項目の設定後、メニュ「ファイル|閉じる」を選ぶ。 A7 - 7 岡本安晴 2001.1.7;2001.3.6 ComboBox1の表示 このボタンのクリックで「文字リストの設定」 ダイアログボックスが表示される プログラムの実行時に ComboBox コンポーネントの右端のボタンをクリックすると、項目 リストが表示される。 「コピー」をクリックすると、ItemIndex の値が0でリスト A7.1 の ComboBox1Click メソッ ドが呼び出される。このときは、 「Copy」ボタンのクリックで実行されるメソッド CopyButtonClick(Sender); A7 - 8 岡本安晴 2001.1.7;2001.3.6 が呼び出される。 「終了」をクリックすると、ItemIndex の値が2なので、 Close; が実行されてプログラムの実行終了となる。 「音の再生」をクリックすると、ItemIndex の値は1となり、手続き PlaySound; が呼び出される。この手続きはリスト A7.2 のようになっている。 リスト A7.2 MediaPlayer の使用 procedure PlaySound; begin with Form1 do with MediaPlayer1 do begin DeviceType:=dtAutoSelect; // ファイルの拡張子でデバイスを選択 // *.wav ファイル名の設定 with OpenDialog1 do begin Title:='*.wav ファイル?'; FileName:='*.wav'; if not Execute // ダイアログボックスの提示 then exit; // ファイル名が設定されないとき end; // MediaPlayer にファイル名を設定する Form1.MediaPlayer1.FileName:=OpenDialog1.FileName; // MediaPlayer がオープンされていないときはオープンする if Mode <> mpOpen then Open; Play; // MediaPlayer による*.wav ファイルの音の再生 end end; MediaPlayer コンポーネント A7 - 9 岡本安晴 2001.1.7;2001.3.6 リスト A7.2 は、MediaPlayer コンポーネントによって*.wav ファイルの再生を行うもので ある。 DeviceType プロパティの設定 DeviceType:=dtAutoSelect; は、ファイルの拡張子.wav によって*.wav ファイル再生用のデバイスが選択されるように するものである。 *.wav ファイルの選択は、OpenDialog コンポーネントによって行っている。下図は、実 行時に OpenDialog1.Execute の実行によって表示されたダイアログボックスである。 設定した*.wav ファイル名を、MediaPlayer コンポーネントの FileName プロパティに設定 する。 Form1.MediaPlayer1.FileName:=OpenDialog1.FileName; 上の FileName のように同じプロパティ名が用いられるときは、限定子 OpenDialog1.などを 付けてどのオブジェクトのプロパティであるのか明記すると分かりやすい。 MediaPlayer コンポーネントがまだ開かれていないときは、オープンする必要がある。 MediaPlayer コンポーネントが開かれているかどうかは Mode プロパティの値で知ることが できる。 if Mode <> mpOpen then Open; MediaPlayer が開かれておれば、メソッド Play; A7 - 10 岡本安晴 2001.1.7;2001.3.6 の実行で*.wav の音が再生される。 Timer コンポーネント 「Start」ボタンをクリックすると、フォームの色が黄色に変わった後、暫くすると緑と青 に交互に色が変わる。この色の交代は、Timer コンポーネントを用いて行っている。Timer コンポーネントは、 設定した時間間隔で OnTimer イベントを繰り返し発生するものである。 この機能を用いると、シミュレーションを一定のペースで進めることができる。 OnTimer イベントの発生の時間間隔は、ミリ秒単位で Interval プロパティに設定する。 Interval の型は Cardinal、すなわち0以上の整数である。OnTimer イベントは、Enabled プロパティが True のときに発生する。 「Start」ボタンのクリックで呼び出されるメソッド StartButtonClick は、次のように なっている。 procedure TForm1.StartButtonClick(Sender: TObject); begin Color:=clYellow; with Timer1 do begin Interval:=1000; Enabled:=true; end; end; 上のメソッドが実行されると、1000 ミリ秒ごとに OnTimer イベントが発生するようにな る。 OnTimer イベントで呼び出されるメソッドは、オブジェクトインスペクタにおいて、 OnTimer 欄の右のセルをダブルクリックするとエディタのユニットに Timer1Timer メソッ ドなどとして挿入される。 ここをダブルクリック サンプルプログラム PSamplea71.dpr の場合、Timer1Timer は次のように宣言されている。 A7 - 11 岡本安晴 2001.1.7;2001.3.6 var stC : Longint = 0; procedure TForm1.Timer1Timer(Sender: TObject); begin if stC = 0 then begin stC:=1; Color:=clGreen; end else begin stC:=0; Color:=clBlue; end; end; すなわち、変数 stC の値によってフォームの色の監視を行い、色が交互に変わるようにして いる。 OnTimer イベントの発生を止めるときは、Enabled プロパティを False に設定する。 「Stop」ボタンのクリックで呼び出される StopButtonClick メソッドは、次のようになっ ている。 procedure TForm1.StopButtonClick(Sender: TObject); begin Timer1.Enabled:=false; Color:=clBtnFace; end; A7 - 12 岡本安晴 2001.1.7;2001.3.6 参考文献 (1) Delphi 5オンラインヘルプ、Inprise Corporation, 1999. (2) Delphi 5 Object Pascal 言語ガイド、インプライズ株式会社、1999. (3) 岡本安晴「Delphi プログラミング入門」 、CQ 出版社、1997. A7 - 13