−トップへ−

カレンダーを作る
その8 カレンダーの固定と指定した年月の表示

 今回は,カレンダーを固定させることと,指定した年月のカレンダーを表示させることを行います。
 
 
 前回に,form2を下図のように設計しました。「カレンダーを固定する」はchekboxコンポーネントで作成しました。

カレンダーを固定する

 まず,checkboxコンポーネントにチェックが入った状態をcheckox1.Tag=1として,チェックが入っていない状態をcheckox1.Tag=0とします。そして,checkox1.Tag=1なら,form1のimage1.mousedownイベントハンドラを無視することにします。

 最初にform2の「カレンダーを固定する」と書かれたcheckboxをダブルクリックするとCheckBox1Clickイベントハンドラが作成されますので,次のようにソースを記述します。

 procedure TForm2.CheckBox1Click(Sender: TObject);
 begin
  if checkbox1.Checked=true then begin //もしチェックボックスにチェックが入ったら
   checkbox1.Tag:=1; //チェックボックスのタグを1にして
  end else begin //それ以外(チェックが入らない場合)
   checkbox1.Tag:=0; //チェックボックスのタグを0にする
  end;
 end;

 次に,Form1に戻り,Image1MouseDownイベントハンドラに1行だけ追加します。

 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); //ポップアップメニューを表示
   exit; //このプロシージャを終了させる
  end;
  if form2.CheckBox1.Tag=1 then exit; //もしform2のCheckBox1.Tagが1なら終了する
  mx:=x; //マウスが押された場所のX座標をmxに保存する
  my:=y; //マウスが押された場所のY座標をmyに保存する
  image1.Tag:=1; //image1.Tagを1にすることにより,マウスが押されていることを示す
 end;

 これでマウスでカレンダーを動かそうとしてもできないようになります。

指定した年月のカレンダーを表示する

 Form2の設定で西暦をEdit1に書き込み,月をEdit2に書き込むようにしました。そこで,カレンダーを作成するときにEdit1のテキストを変数「ye」に代入し,Edit2のテキストを変数「mo」に代入するだけで,終了します。
 
 書き込むところは,「表示」ボタンにします。

 procedure TForm2.Button2Click(Sender: TObject);
  begin
  form1.ye:=edit1.Text; //変数yeにedit1.Textの値を代入
  form1.mo:=edit2.Text; //変数moにedit2.Textの値を代入
  form1.makec; //form1のmakecを実行
 end;

 次回は,休日の日付を赤くすることを行いたいと思います。

−トップへ−