お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"ビジュアルコントロールをマウスで移動する"





Title: ビジュアルコントロールをマウスで移動する

 ビジュアルコントロールをマウスで移動するサンプルコードです。
非ウィンドウコントロールもマウスで移動できるようにします。


(以下、フォームの上のラベル: Lalbe1 をマウスで移動する例です)
まず、フォーム(TForm1)にラベル(Label1)を置きます。
つぎに、TForm1 に private メンバを2つ追加します。

  private
    FIsMouseDown: Boolean; // マウスの押下状態を記録する
    FMousePoint: TPoint;   // マウスの押下位置を記録する

そして、下記の4つのイベントハンドラを追加します。
//----------------------------------------------------------------
// TForm1 の OnCreate イベントハンドラ
procedure TForm1.FormCreate(Sender: TObject);
begin
  // マウスイベントを補足する
  // でも、TLabel はデフォルトで csCaptureMouse が設定してあるので
  // この場合は下の1行は不要です
  Label1.ControlStyle := Label1.ControlStyle + [csCaptureMouse];

  // Boolean型メンバはデフォルトで FALSE に初期化されるので
  // 下記の1行は不要のはずです
  FIsMouseDown := FALSE;
end;
//----------------------------------------------------------------
// TForm1.Label1 の OnMouseDown イベントハンドラ
procedure TForm1.Label1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FIsMouseDown := TRUE;
  FMousePoint := POINT(X, Y);
end;
//----------------------------------------------------------------
// TForm1.Label1 の OnMouseMove イベントハンドラ
procedure TForm1.Label1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if FIsMouseDown then
  with Sender as TControl do // この1行を抜くとフォームの移動になる
    SetBounds(Left - FMousePoint.x + X,
              Top  - FMousePoint.y + y,
              Width, Height);
end;
//----------------------------------------------------------------
// TForm1.Label1 の OnMouseUp イベントハンドラ
procedure TForm1.Label1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  FIsMouseDown := FALSE;
end;
//----------------------------------------------------------------

 マウスで移動したいコントロールが複数ある場合でも
FIsMouseDown, FMousePoint, OnMouseDown, OnMouseMove, OnMouseUp
は共有できます。


以上です。

1998/01/16、河邦 正(GCC02240@niftyserve.or.jp)

Original document by 河邦 正         氏 ID:(GCC02240)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum