2016-07-06 1 views
1

C++ Builder 및 FireMonkey에 문제가 있습니다. Datasnap Rest WebService로 연결된 모바일 응용 프로그램을 만들고 있습니다. 일부 요청은 길기 때문에 대기중인 메시지를 표시하려고합니다.C++ Builder : FireMonkey Visual 구성 요소 새로 고침

lbl_testConnexion->Text = "Please Wait..."; 
lbl_testConnexion->TextSettings->FontColor = TAlphaColorRec::Red; 
this->Invalidate(); 

//Call to the Web Service 
list<Colis>* l = WS->getListeColis("00DP0097"); 

lbl_testConnexion->Text = "Success!"; 

내가 기능을 시도 서식 -> 무효화() 및 레이블 -> 다시 그리기()하지만 마지막 텍스트가 표시됩니다 여기 내 코드입니다. 함수에서 Label을 동적으로 새로 고치려면 어떻게해야합니까?

+0

Application->ProcessMessages() 교체 적어도 ~ 5 초 정도 길어? – deW1

+0

쿼리에는 3 ~ 6 초가 걸리므로 광학 효과가 아닌 것으로 확신합니다. 답변 주셔서 감사합니다 – Dylan

답변

1

텍스트 변경은 요청에 의해 차단 된 주 스레드에 의해 처리되어야합니다. 긴 요청에 대해 별도의 스레드를 사용하지 않으려면 Application->ProcessMessages()으로 전화해야합니다.

lbl_testConnexion->Text = "Please Wait..."; 
lbl_testConnexion->TextSettings->FontColor = TAlphaColorRec::Red; 
Application->ProcessMessages(); 

//Call to the Web Service 
list<Colis>* l = WS->getListeColis("00DP0097"); 

lbl_testConnexion->Text = "Success!"; 

참고 :

당신은 Application->ProcessMessages()로 자르해야합니다. 이 기사에 대한 많은 기사와 토론을 인터넷에서 찾을 수 있습니다. VCL로 작업 할 때 TWinControl 유형의 컨트롤에 대해 Update 메서드가 있는데이 함수는 WinAPI의 UpdateWindow 함수를 호출합니다. Firemonkey는 Windows와 비슷한 기능을 가지고 있지만

은 당신의 눈은 확실 쿼리가 실행되는 UI의 변화를 볼 수 있도록 충분히 빠른 ++ 지금은 정말이 빌더 또는 firemonkey에 대해 있지만, 일반적으로 C 모르는 FMX.Platform.Win.hpp을 포함하고 UpdateWindow(Platform::Win::WindowHandleToPlatform(Handle)->Wnd)

+0

감사합니다! 그것은 작동합니다! – Dylan

+0

'Application-> ProcessMessages()'에서 멀리있어! UI를 재 페인트하기를 원한다면, 개별 컨트롤의'Repaint()'메소드 나 Form 자체를 사용하여 보류중인 페인트 작업을 처리하십시오. 'InvalidateRect()'메서드를 사용하여 다시 칠해야하는 컨트롤에 신호를 보냅니다. –

+0

@RemyLebeau : 나는 이것을 시도했다. 그러나 컨트롤이 즉시 다시 그려지지 않습니다. 또한'TForm'은'Repaint()'메소드를 가지고 있지 않습니다. –