2014-02-08 2 views
-1

좋은 하루 ... Delphi를 사용하여 몇 줄을 만듭니다. 괜찮을 때까지 ...이 줄을 업데이트하려고하면 내 문제가 시작됩니다 ...Delphi에서 드로잉을 업데이트하는 방법

은 내가 사용할 수, 화면을 청소하는 것을 발견

Invalidate() 

예 :

Then if True 
Begin 
      Canvas.Ellipse (0,0,100,50); 
End Else Begin 
     Invalidate(); 
end; 

이 방법은 아주 잘 작동 ...하지만 문제가 메모리 소비입니다 무효화() ; 사용 ....

정상 그것은 Invalidate();

인가 ... 많은 차이가 ... 그것은 30 %를 소모 이제 .... 수있는 다른 기능을보다 0.3 %이 소비 OnPaint 두 프로세서를 사용하지 않고 화면을 지우려면 ... OnPaint를 한 번 통과시켜 Invalidate()를주는 방법; ... 항상 업데이트 중이므로 CPU가 많이 소모되므로 ....이 화면을 정리해야하지만 다른 사용자는 OnPaint의 이미지를 업데이트해야합니다.

+1

했나를 'OnPaint'-Method 안에'Invalidate; –

+0

BTW'Invalidate'는 화면을 지우지 않았지만, ** 가능한 한 빨리 다시 칠하도록 컨트롤에 알리기위한 것입니다. http://docwiki.embarcadero.com/Libraries/en/Vcl.Controls.TControl.Invalidate –

+0

@SirRufo 이는 무효화가하는 것이 아닙니다. 다시 그리기 또는 새로 고침을하십시오. Invalidate는 InvalidateRect를 호출하여 컨트롤에 dirty라고 표시합니다. 메시지 대기열이 비어있는 경우에만 페인트 사이클이 시작됩니다. –

답변

0

... 난 당신이 내가 없어진 것을 이해 생각 감사합니다 ... 나는이 방법을했고, 분명히 잘 작동하고 다음의 OnPaint의

procedure paintestOnclick(blabla); 
Begin 
    if word= 'Open' then Begin 
     onpaintTela := True; 
     repaint(); 
     End; 

     if word= 'close' Then Begin 
     invalidate(); 
     onpaintTela := False; 
     End; 
End; 

절차 :

if onpaintTela then begin 
    //Comand paint 
End; 
+1

이것은 당신이 물어 본 질문에 답하지 않습니다. 그래도 대답이 필요합니까? –

+0

@David Heffernan 네 .. 그게 효과가 있었는데 ... 그게 내가 찾고 있던 것이 었습니다 .... – user3185448

+0

당신이 우리에게 당신을 도우라고 격려하지 않고 있습니다. –

4

질문은 자세히 부족합니다. 코드가 불완전합니다. 그러나, 당신이 그림을 그리는 같은 장소에서 Invalidate으로 전화하는 것 같습니다. 그것은 분명한 실수입니다.

페인팅은 창 영역을 유효하지 않은 것으로 표시하여 작동합니다. 윈도우 영역이 유효하지 않은 경우 시스템은 메시지 큐가 비게 될 때 페인트 사이클을 시작합니다. 그 시점에서 프로그램 자체가 페인트 작업을합니다. 프로그램이 외관을 바꿀 필요가있을 때, 수정 된 영역을 무효화 한 다음 계속되는 페인트 사이클을 처리합니다.

그림을 그리는 방법으로 Invalidate 전화를 한 것처럼 보입니다. 그로 인해 시퀀스가 ​​무한히 반복됩니다.

  • 페인트합니다.
  • 귀하는 무효화됩니다.
  • 메시지 큐가 비 었으며 창이 올바르지 않습니다.
  • 시스템이 페인트 사이클을 발생시킵니다.
  • 페인트합니다.
  • 귀하는 무효화됩니다.
  • 등등.

이 무한한 일련의 이벤트로 인해 CPU주기가 계속 레코딩됩니다.

해결 방법은 페인트 방법에서 무효화를 중지하는 것입니다. 나는 왜 당신이 거기서 무효화하는지 모르지만, 당신이하려고하는 것은 무엇이든지, 당신의 창을 무효로하는 것은 대답이 아닙니다.

관련 문제