MouseMoveを受け付けない

解決


たまにデル  2006-09-13 17:54:22  No: 23217  IP: 192.*.*.*

以前作ったDelphiソフトをちょっと改造しようと久しぶりにソースをいじりましたが思うように動かず苦戦しています。  

Procedure Tform1.BtnDispMouseMove(Sender:  TObject; Shift: TShiftState; X, Y: Integer);

Begin

Beep;
/// ここであるドキュメントを表示

End;

End;

というもので他のコントロールで問題なく動いているものですがここではBeepすら鳴りません。何故動かないのか宣言などを何度もチェックなどして対応しようとしましたが思わぬ反撃で半日いじっていたのですが解決しません。コンパイル時のエラーも出ません。チェックすべきヒントなど何かアドバイスいただきたく宜しくお願いします。

編集 削除
表裏 未里  URL  2006-09-14 11:48:13  No: 23218  IP: 192.*.*.*

思いっきりはずれていたらごめんなさい。

私の環境ではBeep音が鳴らないという現象が起きてます。
今はshowmessage('数字とかいれる')で処理が行われているかcheckしてます。

お役に立たなかったらごめんなさい。

編集 削除
deldel  2006-09-14 11:55:45  No: 23219  IP: 192.*.*.*

ブレークポイントをBeepの行に設定して、止まるかどうかチェックするとか、
Windows.Beep($FFF, 10) とかに変えるとか、
Beepの代わりに Caption := 'Move中'; に変えるとか、
かな?

編集 削除
たまにデル  2006-09-14 12:25:28  No: 23220  IP: 192.*.*.*

表裏  未里さま  アドバイスありがとうございました。
「Beep」の件は了解しました。当方の現象はMouseMoveしてもそのProcedureに行かないということです。ShowMessageを入れたりBeepを入れたりブレークポイントを入れたりしているのですがそこに行き着きません。
他のボタンは問題なく動いているのですが何故かこのボタンだけうMouseMoveを受け付けません。5分の作業と思っていたのがとうとう1日以上の問題になってしまいました。注意点などアドバイスをいただけたら幸甚であります。

編集 削除
orz  2006-09-14 13:03:14  No: 23221  IP: 192.*.*.*

BtnDisp のクラスは
TButton、TSpeedButton、TBitBtn のいずれかですか?
それとも、別のボタンですか?

> 他のコントロールで問題なく動いている
ということですが、すべて同じコンポーネントですか?

もちろん、ボタンのイベントに割り当てられていますよね?

編集 削除
表裏 未里  URL  2006-09-14 13:04:58  No: 23222  IP: 192.*.*.*

ボタンの上を通過したときに反応するメソッドということですね。
すると  そのボタンにwm_mousemoveが来ているかcheckしてみましたか?

Delphiだと、WinSightで可能ですね(^^)

>5分の作業が1時間。

私も良くありますこれ(はぅ)

編集 削除
表裏 未里  URL  2006-09-14 13:06:18  No: 23223  IP: 192.*.*.*

失礼1時間ではなく1日以上です(訂正)

編集 削除
表裏 未里  URL  2006-09-14 13:28:02  No: 23224  IP: 192.*.*.*

ちょっとプログラムの合間にプログラムを書いてみました(これは休憩というのか)
使えたら使ってください。


宣言部で

private
    { Private 宣言 }

    procedure AppMessage(var msg: TMsg; var Handled: boolean);


実行部で

procedure TForm1.AppMessage(var msg: TMsg; var Handled: boolean);
begin

 //BtnDispボタンの上にマウスが来たらcaptionを1にする
  if (msg.message=wm_mousemove) then
  if (msg.hwnd=BtnDisp.Handle) then
  begin
    //ボタンの上に来たら処理
    BtnDisp.Caption:='1';
  end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.onMessage := AppMessage;
end;

編集 削除
たまにデル  2006-09-14 13:36:36  No: 23225  IP: 192.*.*.*

表裏様、deldel様、orz様、皆様ありがとうございました。解決できました!  
何度も何度もチェックしてきたつもりでしたが頂きましたアドバイスを一つずつチェックしていったところObjectインスペクタでMouseMoveが入っていないことを発見しました。大変低レベルなことで質問させていただき申し訳ありませんでしたが一人では気付かずに悩んでいるところを的確なアドバイスをいただいたお陰で解決できました。大感謝です。Thanks again.

(表裏様でも1日になることがあるとお聞きして安心しました。今後また何かありましたらお助けください)

編集 削除