以前作ったDelphiソフトをちょっと改造しようと久しぶりにソースをいじりましたが思うように動かず苦戦しています。
Procedure Tform1.BtnDispMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Begin
Beep;
/// ここであるドキュメントを表示
End;
End;
というもので他のコントロールで問題なく動いているものですがここではBeepすら鳴りません。何故動かないのか宣言などを何度もチェックなどして対応しようとしましたが思わぬ反撃で半日いじっていたのですが解決しません。コンパイル時のエラーも出ません。チェックすべきヒントなど何かアドバイスいただきたく宜しくお願いします。
思いっきりはずれていたらごめんなさい。
私の環境ではBeep音が鳴らないという現象が起きてます。
今はshowmessage('数字とかいれる')で処理が行われているかcheckしてます。
お役に立たなかったらごめんなさい。
ブレークポイントをBeepの行に設定して、止まるかどうかチェックするとか、
Windows.Beep($FFF, 10) とかに変えるとか、
Beepの代わりに Caption := 'Move中'; に変えるとか、
かな?
表裏 未里さま アドバイスありがとうございました。
「Beep」の件は了解しました。当方の現象はMouseMoveしてもそのProcedureに行かないということです。ShowMessageを入れたりBeepを入れたりブレークポイントを入れたりしているのですがそこに行き着きません。
他のボタンは問題なく動いているのですが何故かこのボタンだけうMouseMoveを受け付けません。5分の作業と思っていたのがとうとう1日以上の問題になってしまいました。注意点などアドバイスをいただけたら幸甚であります。
BtnDisp のクラスは
TButton、TSpeedButton、TBitBtn のいずれかですか?
それとも、別のボタンですか?
> 他のコントロールで問題なく動いている
ということですが、すべて同じコンポーネントですか?
もちろん、ボタンのイベントに割り当てられていますよね?
ボタンの上を通過したときに反応するメソッドということですね。
すると そのボタンにwm_mousemoveが来ているかcheckしてみましたか?
Delphiだと、WinSightで可能ですね(^^)
>5分の作業が1時間。
私も良くありますこれ(はぅ)
失礼1時間ではなく1日以上です(訂正)
ちょっとプログラムの合間にプログラムを書いてみました(これは休憩というのか)
使えたら使ってください。
宣言部で
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;
表裏様、deldel様、orz様、皆様ありがとうございました。解決できました!
何度も何度もチェックしてきたつもりでしたが頂きましたアドバイスを一つずつチェックしていったところObjectインスペクタでMouseMoveが入っていないことを発見しました。大変低レベルなことで質問させていただき申し訳ありませんでしたが一人では気付かずに悩んでいるところを的確なアドバイスをいただいたお陰で解決できました。大感謝です。Thanks again.
(表裏様でも1日になることがあるとお聞きして安心しました。今後また何かありましたらお助けください)
ツイート | ![]() |