時計を作る
その1 文字盤を作る1
はじめに
今回は,時計を作ってみます。今回は時計ですので,丸い文字盤をデスクトップに表示させてみたいと思います。
透明なフォームを作る
透明なフォームを作るのは簡単ですので,早速プログラムを記述してみます。
まず,formにimegeコンポーネントを貼り付けて,FormCreateを呼び出します。
type
TForm1 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
size:integer; //sizeは時計の文字盤の半径の大きさにします
public
{ Public 宣言 }
end;
:
:
:
procedure TForm1.FormCreate(Sender: TObject);
begin
size:=100; //sizeをとりあえず100にします
form1.ClientWidth:=size*2; //フォームの内側の幅をsizeの2倍にします
form1.ClientHeight:=size*2; //フォームの内側の高さをsizeの2倍にします
form1.TransparentColor:=true; //フォームを透明にします
form1.TransparentColorValue:=clred; //フォームの透明色を赤にします
form1.Color:=clred; //フォームの色を赤にします
end;
end.
これだけ記述して実行すると下のようになります。この段階でフォームの内部が透明になっています。透明色を赤にしたのは,時計ではまず使われない色だからですが,別な色にすることもできます。この段階で周りの枠を非表示すると,フォームが全く見えなくなってしまうので枠を消すのは最後にします。

次に,この透明なフォームに文字盤である円を表示させます。
type
TForm1 = class(TForm)
Image1: TImage;
procedure makeban; //←これを記述して,[Shift]+[Ctrl]+[C]を押すと新しいプロシージャが生成されます
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
size:integer;
//sizeは時計の文字盤の半径の大きさにします
public
{ Public 宣言 }
end;
:
:
:
procedure TForm1.FormCreate(Sender: TObject);
begin
size:=100;
//sizeをとりあえず100にします
form1.ClientWidth:=size*2;
//フォームの内側の幅をsizeの2倍にします
form1.ClientHeight:=size*2;
//フォームの内側の高さをsizeの2倍にします
form1.TransparentColor:=true;
//フォームを透明にします
form1.TransparentColorValue:=clred;
//フォームの透明色を赤にします
form1.Color:=clred;
//フォームの色を赤にします
image1.left:=0; //image1のX座標を0にします
image1.Top:=0; //image1のY座標を0にします
image1.Width:=form1.ClientWidth; //image1の幅をform1の内側の幅と同じにします
image1.Height:=form1.ClientHeight; //image1の高さをform1の内側の高さと同じにします
makeban; //←これを記述
end;
procedure TForm1.makeban; //これが新しく生成されたプロシージャです
var
w:integer; //変数wを整数宣言します(文字盤の枠の太さを表すために使用します)
begin
w:=size div 30; //wの大きさをsizeの30分の1にしてみます
with image1.Canvas do begin
brush.Color:=clred; //ブラシの色を赤にして
fillrect(image1.ClientRect); //image1のcanvasを赤で塗りつぶします(これで透明になります)
brush.Color:=$fafafa; //次にブラシの色を灰色っぽい白にして
brush.Style:=bssolid; //ブラシの塗りつぶしのスタイルを「bssolid」にします
pen.color:=$cccccc; //ペンの色を灰色にします(これが枠の色になります)
pen.width:=w * 2; //ペンの太さを変数「w」の2倍にします
Ellipse(w,w,image1.Width-w,image1.Height-w); //円を描きます
end;
end;
end.
上記を記入して実行すると下図のようになります。

次回はこの文字盤に目盛をつけてみます。