6

に設定すると、resize flickerがはるかに良くなることに気づきました。プロパティが存在し、デフォルトであるため、それには何らかの理由があるはずです。TPanel.FullRepaintFalseTrue

設定するかどうかはどうやって決めるの?

ヘルプは次のように述べています。

FullRepaintは、サイズが変更されたときのパネルの応答を制御します。FullRepaintがtrueの場合、サイズが変更されると、斜角の境界線を含むパネル全体が再描画されます。FullRepaintがfalseの場合、斜角の境界線の内側の領域のみが再描画されます。

http://docwiki.embarcadero.com/Libraries/XE3/en/Vcl.ExtCtrls.TPanel.FullRepaint

そのテキストはそれが何をするかを述べていますが、なぜではありません...

4

2 に答える 2

4

欠落しているFullrepaintの効果を示すことができ、それが必要かどうかを判断する必要があります。

  1. フォームにパネルを配置し、すべての方向にアンカーを設定します
  2. PaintCaptionをfalseに設定するか、空のキャプションを使用します
  3. フォームに別のパネルを配置して、フォームのサイズを変更する場合に、最初のパネルの一部が2番目のパネルで覆われるようにします。

プログラムを実行してフォームのサイズを変更します。最初のパネルの境界線が更新されない場合があります。
これは、WMWindowPosChangedで(FullRepaintまたは(ShowCaption and(Caption <>'')))の場合にinvalidateが呼び出されるために発生します。それ以外の場合は、右および/または下のみを含むrectのInvalidateRect(Handle、Rect、True)のみが呼び出されます。境界線は無効になります。(訂正してくれたSertac Akyuzに感謝します)

あなたが無効化を回避することはちらつきを減らし、多くの場合完全な無効化の必要性が与えられないので、ユーザーは自分でどのように進めるかを決めることができます。

まれにしか使用されないパネル、Fullrepaintなしのアッパー

于 2013-02-10T07:21:47.400 に答える
0

以前のバージョンのWindows(正確にはどのバージョンまでかはわかりません)ではFullRepaint、フォームのサイズが変更されたときにパネルの境界線にグラフィカルなアーティファクトが発生しないようにする必要がありました。私の知る限り、これは少なくともWindowsXP以降は問題になりませんでした。

于 2013-02-10T00:59:27.720 に答える