ポップアップ中のポップアップメニューを再描画するには?

解決


超高校生級の初心者  2014-10-01 19:00:06  No: 46722

Firefox32のように、ポップアップメニューの1項目に4つのボタンを描画して、
そのそれぞれのボタンはマウスのEnter/Leaveに反応してホット描画というのをやりたいのですが、どうすればTMenuItemを再描画できますか?

TMenuItem.MenuChanged(True)を行えば一応可能なのですが、メニューが再構築されるため激しくチラつき、使い物になりません。
テスト用のソース
http://www1.axfc.net/u/3332551.zip

よろしくお願いします。


Mr.XRAY  2014-10-05 08:15:07  No: 46723

[超高校生級] の方にレスするのは畏れ多く,僭越ではありますが,

http://d.hatena.ne.jp/keyword/%C4%B6%B9%E2%B9%BB%B5%E9

MenuChanged はメニュー項目の構造の変更の場合に,内部で実行されるメソッドです.
PopupMenu のウィンドウに対して RedrawWindow を実行すれば,
チラつきが少なくなると思いますよ.

http://docwiki.embarcadero.com/Libraries/XE7/ja/Vcl.Menus.TMenu.MenuChanged


超高校生級の初心者  2014-10-05 18:44:56  No: 46724

仰る通り、RedrawWindowで解決することができました。
ありがとうございました。


Mr.XRAY  2014-10-05 22:05:17  No: 46725

プロジェクトをダウンロードして,Delphi を起動して確認するのは面倒だ.
という方に,MenuChanged と RedrawWindow による違いを確認できるように,
実行ファイル (EXE) だけを UP しておきました.
興味のある方はどうぞ.
Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成しています.

http://mrxray.on.coocan.jp/Delphi/zip/PopupMenu_ImageItem_QandA.zip


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加