カレンダーを作る
その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;
次回は,休日の日付を赤くすることを行いたいと思います。