くだすれDelphi(超初心者用)その58【Embarcadero】

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2020/03/11(水) 18:30:39.03ID:NTiFnax/
Delphi(デルファイ)について、他のスレッドでは書き込めない超低レベル、もしくは
質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。

Delphi使いが優しくコメントを返しますが、お礼はDelphiの布教と初心者の救済をお願いします。

■Delphi 10.3
ttp://www.embarcadero.com/jp/products/delphi

■Delphi Community Edition (無料)
iOS、Android、Windows、macOS向けアプリも開発可能。年間売上5000 US$以内の商用開発可。
https://www.embarcadero.com/jp/products/delphi/starter

<前スレ>
くだすれDelphi(超初心者用)その57
https://mevius.5ch.net/test/read.cgi/tech/1476332514/
705デフォルトの名無しさん
垢版 |
2021/04/14(水) 12:17:00.20ID:Hb0A0MO4
>>704
そっちね
試してみた
結論から言うとダミーのポップアップメニューを関連付ければOnContextPopupイベントが発生しそこでHandled=trueにすればポップアップは呼ばれなくなる
もう一つの解決策はTComboBoxの下位クラスを作成しWM_CONTEXTMENUを上位クラスで処理させないようにすること

原因なんだが、
OnContextPopupイベントはTControlで実装されている
TComboBoxはエディット部分を別のウインドウとして保持している
PopupMenuプロパティがNilの場合、WM_CONTEXTMENUが送られるとそのエディットのウインドウプロシージャに制御を渡すので無条件にエディットのデフォルトのポップアップが表示される
PopupMenuプロパティに関連付けがあるとコントロールの上位クラスに制御を渡し、上位クラスTControlまで行くことでOnContextPopupイベントが呼ばれる
706デフォルトの名無しさん
垢版 |
2021/04/14(水) 12:18:10.91ID:Hb0A0MO4
×OnContextPopupイベントはTControlで実装されている
〇OnContextPopupイベントの呼び出しはTControlで実装されている
707デフォルトの名無しさん
垢版 |
2021/04/14(水) 12:37:48.37ID:Hb0A0MO4
補足

>もう一つの解決策はTComboBoxの下位クラスを作成しWM_CONTEXTMENUを上位クラスで処理させないようにすること

オーバーライドするのは procedure EditWndProc(var Message: TMessage); virtual; ね
ここでWM_CONTEXTMENUが飛んで来たら上位クラスに渡さずExitすればポップアップしなくなる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況