• ベストアンサー

Delphi6 OnMouseUp

deiphi6です。 OnMouseDown,OnMouseMoveイベントで返ってくるX,Y座標値と、OnMouseUpで返ってくるX,Y座標値に違いがあります。 例えば、 ScrollBoxの中にPaintBoxを置いて、PaintBoxのWidth(Height)を32768以上にします。 実行させ、スクロールさせてPaintBoxが32768以上のポイントでマウスボタンを押して離すと。 OnMouseUpで返ってくるX(Y)座標はマイナスになります。 また、65536以上にするとまた1から始まるプラスのX座標がかえってきます。 OnMouseDown,OnMouseMoveでは正常なプラス値です。 つまり、Intergerで返ってきてないってことですか? OnMouseMoveでの座標を代用して使ってますが、マウスの早い動きには正確を欠きます。 何かいい回避方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#21216
noname#21216
回答No.2

procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var p : TPoint; begin if (Sender <> nil) then begin p := (Sender as TControl).ScreenToClient(mouse.CursorPos); X := p.X; Y := p.Y; end else exit; caption := Format('%d %d',[x,y]); end; procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin caption := Format('%d %d',[x,y]); end; 既存のコードを変更したくないのでしたら こんなふうに x,yに代入するといいです

situmonnsya
質問者

お礼

>p := (Sender as TControl).ScreenToClient(mouse.CursorPos); この記述がわかりませんでした。 助かりました。ありがとうございます。

その他の回答 (1)

noname#21216
noname#21216
回答No.1

マウスの取得ができないという疑問に さいごは、動作速度をあげたいと・・・。 どちらも初歩的内容ですので 動作速度のほうは 別話題で投稿されることをお勧めします。 procedure TForm1.PaintBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin caption := Format('%d %d',[x,y]) end; >OnMouseUpで返ってくるX(Y)座標はマイナスになります。 確かにそうなるようですね。 delphi2005でも同じなので ソースコードをみましたら DoMouseDown DoMouseUp で コードに少し違いが見られ DoMouseUpでコードが 一部省いてあるようなので そこが原因かもしれないですね。 delphiは 初心者では解決への糸口をみつけるのは苦労するので はじめたばかりでしたら、vs2005を使った方がいいとおもいますよ vs2005は参考書や関連サイトもたくさんありますし・・・ 一つの提案として 楽な順 ・with PaintBox1.ScreenToClient(mouse.CursorPos) do caption := Format('%d %d',[x,y]) ・他の言語へ乗り換え ・Controls.pasソースコードを変更してコンパイル ・別の手段を考える

situmonnsya
質問者

お礼

ご回答ありがとうございます。 とりあえずOnMouseMoveイベントで獲た座標を使います。

関連するQ&A