Imageを右クリックした時のイベント処理は?

解決


Gach  2003-05-19 18:02:26  No: 3560  IP: [192.*.*.*]

連続でスレを立てて申し訳ありません。
Imageを右クリックした時にEditの数字を-1させたいのですが、
どのようにすれば良いのでしょうか?

編集    削除
にしの  2003-05-19 18:18:32  No: 3561  IP: [192.*.*.*]

簡単にすますのであれば、OnMouseUpを使用しましょう。
ただし、マウスボタン押す、マウス移動、マウスボタン離すという動作も、「クリック」と判断します。
これがいやであれば、OnMouseDown,OnMouseMoveでも処理を加えるとか。

編集    削除
Jac  2003-05-19 20:10:42  No: 3562  IP: [192.*.*.*]

コンポーネント名をImage1とEdit1とします。
Image1のOnMouseUpイベントに次のようなものを書けば良いと思います。

procedure TMainForm.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbRight then
  begin
    Edit1.Text := StrToIntDef(Edit1.Text,0) - 1 ;
  end ;
end;

Edit1.Textに書かれている内容が数字とは限らないので上記のようにしてみました。

編集    削除
Jac  2003-05-19 20:11:15  No: 3563  IP: [192.*.*.*]

間違えました。

Edit1.Text := IntToStr(StrToIntDef(Edit1.Text,0) - 1) ;

ですね。

編集    削除
Gach  2003-05-19 23:53:49  No: 3564  IP: [192.*.*.*]

ええと、左クリック(OnClick)はEditを+1するようにしています。
左クリックで+1、右クリックで-1を実現したいと思っています。

編集    削除
Gach  2003-05-20 05:57:09  No: 3565  IP: [192.*.*.*]

すみません。
ソースを読み違えていました。
解決です。
お二方ありがとうございました。

編集    削除
Gach  2003-05-20 06:03:05  No: 3566  IP: [192.*.*.*]

何度もお手数お掛けします。
メインフォームにポップアップメニューを表示するようにしているのですが、
上記ソースを使うと、-1されて、さらにポップアップメニューまで表示されてしまいます。
これを防ぐ事は出来ますでしょうか?

編集    削除
にしの  2003-05-20 07:41:19  No: 3567  IP: [192.*.*.*]

こんな感じでしょうか。
# 変数などは適宜変更を。

ただし、ボタンの上でも効かなくなります。つまり、Form1を直に右クリックしたときだけポップアップメニューが出ます。

procedure TForm1.FormContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
   comp: TComponent;
   pt: TPoint;
begin
   GetCursorPos(pt);
   comp := FindDragTarget(pt, true);
   Handled := (comp<>Form1);
end;

編集    削除
Gach  2003-05-20 11:35:10  No: 3568  IP: [192.*.*.*]

なるほど。
参考になりました。
にしのさん、ありがとうございました。

編集    削除