私は非常に奇妙な問題を抱えています。Win7 プラットフォームで D2007 を使用しています。
アプリケーションは最初の Win7 マシン (私のもの) では問題なく動作しますが、2 番目の Win7 システム (サムスン タブレット) では UI が正しく更新されません。
タブレットでリモート デバッグを使用しています。評価とデバッグの長いサイクルの後、WM_SIZE
フレームの 1 つに が起動されていないことがわかりました。各フレームは、彼女の親とAlign = alClient
.
私のマシンでは、このメッセージは適切に送信され、もちろん、UI は適切に動作します。
WM_Size メッセージ コードを送信する Windows ユニットの外部関数はどれですか?
問題を詳しく説明します。
アプリケーションを最大化またはサイズ変更すると、2 台の Win7 マシン間で UI の更新の動作が異なります。
一部のフレームは正しくサイズ変更されていますが、そのうちの 1 つはそうではありません。構造は次のとおりです。
MainForm -> 一部のフレーム -> PageControl -> TabSheet -> Frame1 -> Frame2。
ご了承ください :
UI はほとんどのコンピューターで正しく動作します。
標準の Windows メカニズムを使用します
この構造では、含まれる TabSheet までのすべてのフレームがサイズ変更されますが、Frame1 はサイズ変更されません。フレームは実行時に作成されます。
TabSheet の名前はわかっているので、ブレーク ポイントで停止して WMSize を表示できます。
でいくつかの条件付きブレーク ポイントを使用しTWinControl.AlignControls
、 のハンドルをキャッチしFrame1
ます。
ブレークポイントをオンClasses.StdWndProc
にすると、 に送信されたメッセージを追跡できましたFrame1.Handle
。
すべてが OK の場合:
$0046 : WM_WINDOWPOSCHANGING
$0083 : WM_NCCALCSIZE
$0085 : WM_NCPAINT
$0014 : WM_ERASEBKGND
$0047 : WM_WINDOWPOSCHANGED
$0005 : WM_SIZE
サイズ変更に失敗した場合:
$0046 : WM_WINDOWPOSCHANGING
$0085 : WM_NCPAINT
$0014 : WM_ERASEBKGND
$0047 : WM_WINDOWPOSCHANGED
どちらもコードは同じで、OSもWin7なので、よくわかりません。WM_NCCALCSIZE
私は 2 つのメッセージを知っているだけWM_SIZE
で、2 番目のケースでは送信されません。
WM_SIZE
そのため、応答を返す関数を探します。