今回は,form2からカレンダーの設定をいろいろ変えてみたいと思います。
とりあえず行うことは,
・ カレンダーの大きさを変える。
・ 指定した年月のカレンダーを表示させる。
・ カレンダーをマウスで動かないようにする。
の3点です。
実はカレンダーの大きさを変えることについては,不具合が発生するのですがそれについての対処も述べていきます。
まず,form2に下図のようにコンポーネントを配置します。
まず,コンポーネントを配置するためにPageControlコンポーネントを配置します。これはツールパレットのWin32の2番目にあります。これを「閉じる」ボタンが隠れないようにフォーム全体に広げてください。その後PageControlコンポーネントの上で右クリックするとメニューが開きますので,そこで「ページの新規作成」を選択してください。
そうすると「TabSheet1」が作成されますので,その上に各コンポーネントを設置します。
「サイズの変更」はTrackBarコンポーネントです。これはWinの5番目にあります。これをTabSheet1の上に配置したら、プロパティを下のように設定します。これらの数値は変更可能ですのでいろいろ試して見てください。
Frequency | 10 ←つまみを動かす間隔を10刻みにする |
Max | 400 ←つまみの最大値を400にする(これを大きくするとカレンダーもより大きくすることができます。) |
Min | 100 ←つまみの最小値を100にする(これを小さくするとカレンダーをより小さくすることができます。) |
Position | 250 ←つまみの最初の位置を250にする |
プロパティの他の部分を変更すると見た目がいろいろ変わるので,試してみると面白いと思います。
「カレンダーを固定する」はCheckBoxコンポーネントです。これはStandardの8番目にあります。
「指定した年月を表示する」は2つのEditコンポーネントと「表示」ボタンです。
文字はLabelコンポーネントを使って表示してあります。
これから,form2にプログラムを記述していきますが,このままではform1の変数を使うことができません。そこでform1で宣言した変数を少し変更します。
現在,変数「ye」と「mo」,「size」は「private」の場所で宣言していますが,これらを「public」に移します。
privateで宣言した変数はそのformの中でしか使えませんが,publicで宣言した変数は他のformからでも使うことができます。
まず,TrackBar1をダブルクリックすると,TrackBar1Changeイベントハンドラが作成されますので,そこに次のように記述します。
記述後に実行すると,メッセージが出ますので「はい」を押してください。するとエラーが表示され,「未定義の識別子:form1」と出ますので,これを無視してもう一度実行を押すとカレンダーが表示されます。
そこでform2を開き,トラックバーのつまみを動かすとカレンダーの大きさが変わることがわかると思います。
カレンダーのサイズは,トラックバーコンポーネントの設定で100〜400ピクセルまで変化させることができます。ここでもしTForm1.FormCreateイベントハンドラで変数「size」の値を300にしておき,トラックバーでサイズを400にすると下のような現象が起きます。
これは,起動時のimageのサイズより大きくすると起きる現象です。これを回避するには,image1の幅と高さを変更するときに
image1.Picture.Bitmap.Widthとimage1.Picture.Bitmap.Heightも一緒に変更します。
具体的には,TForm1.makecイベントハンドラで,以下のようにします。
このようにすることで,imageの大きさをいろいろ変えても正常に表示できるようになります。
次回は,カレンダーをマウスで動かなくさせることと,指定した年月のカレンダーを表示させることを行います。