掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
OnMouseUpを検出するには? (ID:5287)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんな感じでどうでしょう? 升目の大きさは30x30、駒は面倒なので4つにしました。 コンポーネントは以下の通りです。 Image1(盤面): TImage Width,Height = 270 Image2(盤外) : TImage Koma1〜4(駒) : TImage DragMode = dmAutomatic; ※.Image1はImage2より前面、Koma1〜4はImage1より前面に配置してください。 盤面、駒のグラフィックイメージは適当に設定してください。 内容が違うかもしれませんが、参考までに... PS.レスが長くてすいません。 type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Koma1: TImage; Koma2: TImage; Koma3: TImage; Koma4: TImage; private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} { EVENT : 駒(Koma1 〜 4) OnStartDrag 駒ドラッグ開始 } { ※.Koma1〜4共通のイベント } procedure TForm1.Koma1StartDrag(Sender: TObject; var DragObject: TDragObject); begin // DragOver,DragDropで駒を感知しないように全ての駒のEnabledをFalseにする。 Koma1.Enabled := False; Koma2.Enabled := False; Koma3.Enabled := False; Koma4.Enabled := False; end; { EVENT : 駒(Koma1 〜 4) OnStartDrag 駒ドラッグ終了 } { ※.Koma1〜4共通のイベント } procedure TForm1.Koma1EndDrag(Sender, Target: TObject; X, Y: Integer); var AImg : TImage; begin // 全ての駒のEnabledをTrueに戻す。 Koma1.Enabled := True; Koma2.Enabled := True; Koma3.Enabled := True; Koma4.Enabled := True; end; { EVENT : 盤面(Image1) OnDragOver 駒のドラッグ移動中の処理 } procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var AImg : TImage; begin if Source is TImage then begin AImg := Source As TImage; // とりあえずコンポーネントの名前でドラッグ中のオブジェクトが // 駒であることを判定しています。 if Copy(AImg.Name,1,4) = 'Koma' then begin // ドラッグを受け入れて... Accept := True; // マウス位置に駒を表示 AImg.Left := Image1.Left + X - (AImg.Width div 2); AImg.Top := Image1.Top + Y - (AImg.Height div 2); end; end; end; { EVENT : 盤面(Image1) OnDragDrop 駒のドロップ処理 } procedure TForm1.Image1DragDrop(Sender, Source: TObject; X, Y: Integer); var AImg : TImage; begin if Source is TImage then begin AImg := Source As TImage; // とりあえずコンポーネントの名前でドラッグ中のオブジェクトが // 駒であることを判定しています。 if Copy(AImg.Name,1,4) = 'Koma' then begin // 駒の位置を升目に合わせる。 AImg.Left := Image1.Left + (X div 30) * 30; AImg.Top := Image1.Top + (Y div 30) * 30; end; end; end; { EVENT : 盤外(Image2) OnDragOver 駒のドラッグ移動中の処理 } { ※.盤外にドラッグしたくなければこの処理は不要です。} procedure TForm1.Image2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var AImg : TImage; begin if Source is TImage then begin AImg := Source As TImage; // とりあえずコンポーネントの名前でドラッグ中のオブジェクトが // 駒であることを判定しています。 if Copy(AImg.Name,1,4) = 'Koma' then begin // ドラッグを受け入れて... Accept := True; // マウス位置に駒を表示 AImg.Left := Image2.Left + X - (AImg.Width div 2); AImg.Top := Image2.Top + Y - (AImg.Height div 2); end; end; end; { EVENT : 盤外(Image2) OnDragDrop 駒のドロップ処理 } { ※.盤外にドラッグしたくなければこの処理は不要です。} procedure TForm1.Image2DragDrop(Sender, Source: TObject; X, Y: Integer); var AImg : TImage; begin if Source is TImage then begin AImg := Source As TImage; // とりあえずコンポーネントの名前でドラッグ中のオブジェクトが // 駒であることを判定しています。 if Copy(AImg.Name,1,4) = 'Koma' then begin ShowMessage('ここは、盤外です'); end; end; end; end.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.