그래프를 그리고 그 가운데에 사각형을 칠하고 싶습니다. 델파이 7 사용 , 다음과 같이 완료되었습니다 끔찍한 깜박임의 원인번쩍임없이 사각형에 Repaint 직사각형, Windows 7, Delphi
with graphform.canvas do begin
brush.color:=clwhite;
brush.style:=bssolid;
pen.color:=clwhite;
rectangle(1,y0,639,y0-341);
end;
//short wait while other things happen
graphform.waitlab.Invalidate;
: 흰색 사각형 세척 멀리 waitlab는 다음 짧은 대기 후, waitlab가 다시 그려진다. waitLab은 큰 필드의 가운데에있는 작은 사각형입니다.
창 그림을 해제해도 창이 전혀 그려지지 않습니다. 윈도우 페인팅을 끄고 다시 켜서 창을 다시 채우면 나는 원래의 문제가 있습니다. 나는 흰색 사각형에 페인팅을하고 색을 칠합니다.
흰색 필드가 Delphi 컨트롤이 아니기 때문에 페인트 이벤트 핸들러에서 캔버스 코드가 실행되고 실행되어야합니다. 폼에 대한 모든 페인트 메시지에 명시 적으로 다시 그려야합니다. waitlab은 무효화 된 후에 델파이가 다시 칠하는 델파이 컨트롤입니다. 무효화 코드 행은 페인트 이벤트 핸들러에 없습니다. 즉, 긴밀한 루프가 발생합니다.
BUT 코드도 양식에 그려진 다른 것들을 변경하는 통신 이벤트에서 비동기 적으로 실행되며이 페인팅 코드를 직접 호출합니다.
기술 솔루션이 있는지 또는 프로그램 논리에 대한 해결책이 있는지 알 수 없습니다. 너는 무엇을 제안 하는가?
이 코드의 컨텍스트는 무엇입니까? WM_PAINT 이벤트에 응답하여 실행 중입니까? 그리고 그렇지 않다면 왜 안됩니까? –
위의'with' 블록과 같은 그림 코드는'WM_PAINT' 메시지, 즉'OnPaint' 핸들러에 응답하여 실행되어야합니다. 나는 또한 그것이 나의 대답의 경우라고 생각한다. –
'다른 일이 생길 때까지 잠시 기다려주십시오'하면 어떻게됩니까? –