2013-02-10 7 views
6

TPanel.FullRepaintFalse으로 설정하면 resize flicker이 훨씬 좋아졌습니다. 재산이 존재하고 기본적으로 True이기 때문에, 그것에 대한 어떤 이유가 있어야합니다.TPanel FullRepaint를 언제 사용합니까?

설정 여부를 결정하는 방법은 무엇입니까?

도움말은 상태 :

FullRepaint 컨트롤이 크기를 조정할 때 패널이 응답하는 방법. FullRepaint가 true 일 때 경 사진 테두리를 포함하여 전체 패널이 크기가 변경 될 때 다시 표시합니다. FullRepaint가 false이면 경 사진 테두리 안에있는 영역 만 다시 칠합니다.

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

텍스트는 않습니다,하지만라고하지 왜 ... 이전 버전의 Windows에서

+2

거래 : http://stackoverflow.com/questions/8058745/tlabel-and-tgroupbox-captions-flicker- on-resize –

답변

4

누락 된 Fullrepaint의 효과가 표시 될 수 있으므로 필요 여부를 결정해야합니다.

  1. 장소가 폼에 패널이 false로
  2. 설정 PaintCaption 모든 방향에 앵커를 설정하거나 폼의 빈 자막
  3. 장소 다른 패널을 사용, 그래서 당신이 폼의 크기를 조정하는 경우, 첫 번째 패널의 일부는 두 번째 패널로 덮일 것입니다.

프로그램을 실행하고 양식의 크기를 지정하면 첫 번째 패널의 테두리가 새로 고쳐지지 않을 수도 있습니다.
(FullRepaint 또는 (ShowCaption 및 (Caption <> '')))의 경우 WMWindowPosChanged에서 무효화가 호출되거나 오른쪽 및/또는 오른쪽 만 포함하는 rect의 InvalidateRect (Handle, Rect, True) 또는 아래쪽 테두리가 무효화됩니다. (정정을위한 Sertac Akyuz 덕분에)

당신이 말한 것과 같이 무효화를 피하면 깜박 거림이 줄어들고 대부분의 경우 무효화가 필요하지 않으므로 사용자는 진행 방법을 스스로 결정할 수 있습니다. 이 같은 크기 조정 플리커와 Fullrepaint없이 상부 거의 사용되지 않습니다으로

패널은,

+2

* "그렇지 않으면 경계선을 제외한 rect의 InvalidateRect (Handle, Rect, True) 만 가능합니다."* 이것은 잘못되어 설명이 코드와 일치하지 않습니다. 반대로 FullRepaint가 false 인 경우 (캡션이없는 경우) * right * 및/또는 * bottom * 경계를 포함하는 rect 만 무효화됩니다. 테두리는 제외하고 rect가 아닙니다. –

+1

@SertacAkyuz 맞습니다. 편집했습니다. – bummi

+1

그래서 FullRepaint : = True는 패널이 다른 컨트롤에 의해 겹쳐져있을 때만 필요합니까? –

0

(확실하지 최대 정확히 어떤 버전) FullRepaint는 그래픽 artefacting을 방지하기 위해 필요했다 폼의 크기를 조정할 때 패널 테두리. 내가 아는 한, 적어도 Windows XP 이후로는 문제가되지 않았습니다.