−トップへ−

カレンダーを作る
その5 ポップアップメニューを作る

 今回は,ポップアップメニューを作成し,そこからform2を呼び出すようにしてみます。

ポップアップメニューを作成する

 「ポップアップメニュー」コンポーネントは,画面右下にある「ツールパレット」の「standard」の上から3番目にありますので,それをform1に貼り付けます。
 その後,form1に貼り付けた[PopupMenu1]をダブルクリックすると,メニューを入力するウインドウが開きますので,そこでポップアップメニューに表示させたいメニューを入力していきます。

 このメニューにはform2を開くための「設定」と終了があれば良いのですが,それだけだとつまらないので,次の月や前の月を表示できるように,「次の月」,「前の月」のメニューも作っておきます。
 上の図では途中で区切り線が入っていますが,区切り線は,半角で「-」を入力すればできます。

ポップアップメニューの呼び出し

 ポップアップメニューを作成したら,マウスの右クリックでポップアップメニューを呼び出せるようにします。
 ポップアップメニューを呼び出すときには,ポップアップメニューを表示させる座標を入力しないといけません。これをMouseClickイベントハンドラで行おうとすると,マウスを押したときの座標がわからないので,MouseDownイベントハンドで呼び出すようにします。
 
 ここでは,Image1MouseDownイベントハンドラを呼び出し,そこに記述します。

 procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 begin
  if ssright in Shift then begin //マウスの右ボタンを押したとき
   popupmenu1.Popup(form1.left+x,form1.top+y); //X座標:form1.Left+x,Y座標:form1.Top+yの
  end;                      //ところにポップアップメニューを表示させる
 end;

 ここまで記述したら,実行してみます。
 実行してカレンダーが表示されたら,適当な場所で右クリックするとポップアップメニューが表示されると思います。
 
 このとき,form2を作成した後,最初に実行すると,「form2との関連づけを行いますか?」といったメッセージが出ると思いますので,「はい」をクリックしてください。

メニューの設定

 次にポップアップメニューの,それぞれのメニューの設定をしていきます。
 この回の最初に載せた図に,「次の月」,「前の月」…などが書かれていますが,それをダブルクリックすると,N1ClickやN2Clickなどのイベントハンドラが作成されますので,そこに下のようなソースを記述します。

 procedure TForm1.N1Click(Sender: TObject); //「次の月」をクリックしたとき     
 begin
  mo:=inttostr(strtoint(mo)+1); //月の数字を1つ大きくする
  if mo='13' then begin //もし,月が13になったら
   ye:=inttostr(strtoint(ye)+1); //西暦を1つ大きくする
   mo:='1'; //月を1にする
  end;
  makec; //カレンダーを作る
 end;
 
 procedure TForm1.N2Click(Sender: TObject); //「前の月」をクリックしたとき
 begin
  mo:=inttostr(strtoint(mo)-1); //月の数字を1つ小さくする
  if mo='0' then begin //もし月が0になったら
   ye:=inttostr(strtoint(ye)-1); //西暦を1つ少なくする
   mo:='12'; //月を12にする
  end;
  makec; //カレンダーをつくる
 end;
 
 procedure TForm1.N4Click(Sender: TObject); //「設定」を押したとき
 begin
  form2.showmodal; //form2を開く
 end;
 
 procedure TForm1.N5Click(Sender: TObject); //「終了」を押したとき
 begin
  form1.Close; //form1を終わりにする
 end;

 上記のプログラムソースを入力して実行すると,右クリックでポップアップメニューが開き,「次の月」,「前の月」をクリックするとカレンダーの表示が変わり,「設定」をクリックするとform2が表示されると思います。
 
 ちなみに,form2を開くときに,「Showmodal」というのを使いましたが,これは「Show」でform2を開いた場合にはform1をクリックするとform2はform1の後に隠れてしまいますが,「Showmodal」でform2を開くとform1をクリックしてもform2が後に隠れることがありません。
 
 
 次回は,カレンダーの周りにある枠をなくして,見栄えをよくしてみます。

−トップへ−