21

多くのコントロールを含むフォームのサイズを変更すると、ちらつきのためにフォームの見栄えが悪くなります。フォームのサイズ変更をスムーズにするためのヒントは何ですか?

4

5 に答える 5

17
procedure TForm1.WMEnterSizeMove(var Message:TWMMove);
begin
  Self.DisableAlign;
end;

procedure TForm1.WMExitSizeMove(var Message:TWMMove);
begin
  Self.EnableAlign;
end;
于 2009-09-21T19:54:39.977 に答える
5

複雑なフォームはネストされたパネルで構成されていることが多く、再描画プロセスによってちらつきが発生する場合があります。これがプロジェクトの場合である場合、役立つ可能性のある2つの簡単な解決策があります。

  1. FullRepaintパネルのプロパティを無効にします。
  2. フォームでプロパティDoubleBufferedを有効にします。このプロパティはオブジェクトインスペクターにはないのでDoubleBuffered := true;、FormCreateに配置します。
于 2009-09-21T12:33:54.993 に答える
5

WM_SETREDRAW を使用してみてください ( LockWindowUpdateはありません)。

DeferWindowPosもご覧ください。

于 2009-09-21T12:25:03.113 に答える
1

私は次のようにこれを回避しました:

  1. フォームの「OnResize」イベントで、すべての子コントロールを非表示にし、約 500 ミリ秒の目盛りでタイマーを開始するルーチンを用意します。
  2. タイマーが起動したら、それを無効にしてから、すべての子コントロールを表示に設定します。

このアクティビティをいじってみると、サイズを変更している間は空白になるフォームが得られますが、「放す」ときれいに表示されます。

ブライ

于 2009-09-21T14:12:54.813 に答える
0

親ごとに1つ以下の非コンポーネントを配置することでちらつきを回避し、他のすべてのコンポーネントを含むために常に a (aなど)alClientとペアになります。枠のないパネルにグループ化します。alClientTPanel

alLeft、 、alTopおよびalClientメイン ビューの3 つを整列させたいとします。これをしないでください: Form alTop alLeft alClient // your main view

ただし、代わりにこれらを次のように埋め込みます。 Form alTop alClient // panel to avoid flicker alLeft alClient // your main view

alTopいくつかの要素を埋め込むための同じ話。

于 2015-09-23T07:26:22.583 に答える