喫茶XRAYトップページ

[スレッド全体
]

[8062] Re:勇気のある人いませんか?返信 削除
2014/10/4 (土) 21:08:26 Mr.XRAY
清水の舞台から飛び降りるつもりでダウンロードしてみました.
特に問題は発生していません(^^;
Delphi 7 以前のコードのようです.
質問の文章にあった MenuChanged を使用してる部分が分かりました.

Timer1 イベントのコードを書きかえれは,チラつかなくなるようです.
動作確認は Windows 7 U64(SP1) + Delhpi XE(UP1) Pro です.


procedure TformMain.Timer1Timer(Sender: TObject);
var
  ...
  ...
  hPopupWnd : HWND;      //追加
  Flags     : Cardinal;  //追加
begin
  ...
  ...
//    mi.MenuChanged(True);  //削除.本人も激しくチラつくと書いている

    hPopupWnd := FindWindow(PChar(#32768), nil); //追加
    Flags := RDW_INVALIDATE or RDW_UPDATENOW;    //追加
    RedrawWindow(hPopupWnd, nil, 0, Flags);      //追加
  end;
end;

「超高校生級」でも難問だったようですが
問題が発生したら,いろいろ調べてみることですね.
MenuChanged は構造の変更があった場合なので,ウィンドウの更新ではなく,
全て再作成ということでしょう.

[Vcl.Menus.TMenu.MenuChanged - RAD Studio API Documentation]
http://docwiki.embarcadero.com/Libraries/XE7/ja/Vcl.Menus.TMenu.MenuChanged


こんなやつです.
TPanel 上の TPaintBox に描画している画像を TPopupMenu に表示するようです.
というか,TPanel のイメージを TMenuItem の Canvas に描画しています.


[8063] RedrawWindowの効果返信 削除
2014/10/5 (日) 13:00:12 Mr.XRAY
プロジェクトをダウンロードして,Delphi を起動して確認するのは面倒だ.
という方に,MenuChanged と RedrawWindow による違いを確認できるように,
実行ファイル (EXE) だけを UP しておきました.
興味のある方はどうぞ.
Windows 7 U64(SP1) + Delphi XE(UP1) Pro で作成しています.

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


[8064] FindWindow の引数を修正返信 削除
2014/10/5 (日) 20:02:49 Mr.XRAY
>     hPopupWnd := FindWindow(PChar(#32768), nil); //追加

まずい!!
引数で PChar の使用方法には要注意ですね.
一応期待通り動作はしますが...
既に UP しているファイルも以下に修正しました.
ついでに,少しコードの一部も修正・変更しています.

    hPopupWnd := FindWindow('#32768', nil); //追加


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82