15

私はかなりのフォームでリアルタイムの描画を行っています。ユーザーがフォームのサイズを変更するとき、ユーザーがマウス ボタンを離すまでサイズ変更をグラフィック レンダリングに適用したくないため、サイズ変更が終了します。これを検出し、ユーザーがフォームのサイズ変更を完了した後にのみレンダリングのサイズを変更するにはどうすればよいですか? 現在、OnResizeフォームのイベントを使用すると、マウスが移動したすべてのピクセルに対して常にすべてが再レンダリングされるためです。

マウスのダウン/アップ イベントを試してこれを追跡しましたが、フォームのサイズが変更されているときにこれらのイベントは呼び出されません。

4

1 に答える 1

25

移動またはサイジングが開始されたことを検出するには、WM_ENTERSIZEMOVEメッセージをキャッチします。ユーザーがウィンドウのタイトル バーまたはサイズ変更境界線をクリックすると、ウィンドウに送信されます (ウィンドウが移動ループまたはサイズ変更ループに入る理由)。

移動またはサイジングが完了したことを検出するには、WM_EXITSIZEMOVEメッセージをキャッチします。ユーザーがウィンドウのタイトル バーまたはサイズ変更境界線を離すと、ウィンドウに送信されます (ウィンドウが移動ループまたはサイズ変更ループを終了する理由)。

フォーム レベルでそれらを宣言 (および実装) することで、それらのいずれかをキャッチできます。

procedure WMEnterSizeMove(var Message: TMessage); message WM_ENTERSIZEMOVE;
procedure WMExitSizeMove(var Message: TMessage); message WM_EXITSIZEMOVE;
于 2012-05-18T01:07:54.413 に答える