−トップへ−

時計を作る
その4 フォームの枠を取り除く

フォームの枠を取り除く

 今回はフォームの枠を取り除いてみます。
 枠を取り除くことは簡単なのですが,そうするとソフトを終了したり場所を変えたりすることができなくなるので,それに対応する必要があります。

 それに対応するために,ポップアップメニューを作り,次の3つのイベントハンドラを呼び出しておきます。
    .Image2MouseDown
 .   Image2MouseMove
 .   Image2MouseUp
    (フォーム上にはImage2コンポーネントが置かれている状態なのでImage2のイベントハンドラを呼び出しておきます。)

 ポップアップメニューには「設定」と「終了」を作成します。下の図のようになったところで,「終了」をダブルクリックすると新たに「TForm1.N2Click」が作成されます。

         

 ここまで準備できたら,プログラムソースを記述します。

 private
  { Private 宣言 }
  size,mx,my:integer; //sizeは時計の文字盤の半径の大きさにします
                //時計の文字盤を移動させるために,mxとmyを追加します
 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の内側の高さと同じにします
  image1.Visible:=false; //image1を非表示にします
  image2.left:=0; //image2をimage1と同じにします
  image2.Top:=0; //
  image2.Width:=form1.ClientWidth; //
  image2.Height:=form1.ClientHeight; //
  form1.BorderStyle:=bsnone; //これを記述するとフォームの周りの枠が消えます
  makeban;
 end;

 procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer); //Image2の上でマウスボタンを押したときのイベントハンドラです
 begin
  if ssright in Shift then begin //もしマウスの右ボタンを押したとき
   popupmenu1.Popup(form1.left+x,form1.top+y); //ポップアップメニューを指定した座標のところに表示
   exit; //プログラムを終了する
  end;
   //左ボタンを押したとき
  mx:=x; //左ボタンを押したときのマウスのx座標とy座標を記録しておく
  my:=y;
  image2.Tag:=1; //Image2のタグを1にする(これでマウスが押されたことを記録する)
 end;

 procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer); //Image2の上でマウスを移動したときのイベントハンドラです
 begin
  if image2.Tag=0 then exit; //もしImage2のタグが0のとき(マウスが押されていないとき)プログラムを終了する
  form1.Left:=form1.Left-mx+x; //Form1の座標をマウスの動きに合わせて移動させる
  form1.Top:=form1.Top-my+y; //
 end;

 procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer); //Image2の上でマウスボタンを離したときのイベントハンドラです
 begin
  image2.Tag:=0; //Image2のタグを0にする(マウスが押されていないことを記録する)
 end;

    :
    :
    :

 procedure TForm1.N2Click(Sender: TObject); //N2(「終了」メニュー)をクリックしたときのイベントハンドラです
 begin
  form1.Close; //Form1を終了させます
 end;

    :
    :
    :

 end.

これを実行して,右クリックをしたときの状態です。ここで「終了」を押すと,終了します。

         

−トップへ−