多くのコントロールを含むフォームのサイズを変更すると、ちらつきのためにフォームの見栄えが悪くなります。フォームのサイズ変更をスムーズにするためのヒントは何ですか?
5 に答える
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
Self.DisableAlign;
end;
procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
Self.EnableAlign;
end;
複雑なフォームはネストされたパネルで構成されていることが多く、再描画プロセスによってちらつきが発生する場合があります。これがプロジェクトの場合である場合、役立つ可能性のある2つの簡単な解決策があります。
FullRepaint
パネルのプロパティを無効にします。- フォームでプロパティ
DoubleBuffered
を有効にします。このプロパティはオブジェクトインスペクターにはないのでDoubleBuffered := true;
、FormCreateに配置します。
WM_SETREDRAW を使用してみてください ( LockWindowUpdateではありません)。
DeferWindowPosもご覧ください。
私は次のようにこれを回避しました:
- フォームの「OnResize」イベントで、すべての子コントロールを非表示にし、約 500 ミリ秒の目盛りでタイマーを開始するルーチンを用意します。
- タイマーが起動したら、それを無効にしてから、すべての子コントロールを表示に設定します。
このアクティビティをいじってみると、サイズを変更している間は空白になるフォームが得られますが、「放す」ときれいに表示されます。
ブライ
親ごとに1つ以下の非コンポーネントを配置することでちらつきを回避し、他のすべてのコンポーネントを含むために常に a (aなど)alClient
とペアになります。枠のないパネルにグループ化します。alClient
TPanel
alLeft
、 、alTop
およびalClient
メイン ビューの3 つを整列させたいとします。これをしないでください:
Form
alTop
alLeft
alClient // your main view
ただし、代わりにこれらを次のように埋め込みます。
Form
alTop
alClient // panel to avoid flicker
alLeft
alClient // your main view
alTop
いくつかの要素を埋め込むための同じ話。