2016-07-06 59 views
1

我有一個C++ Builder和FireMonkey的問題。我正在創建一個與Datasnap Rest WebService連接的移動應用程序。有些請求有點長,所以我想顯示一個等待消息。這裏是我的代碼:C++ Builder:刷新FireMonkey Visual Component

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!"; 

我試圖函數形式 - >的Invalidate()和無標記>重畫(),但只顯示最後文本。 我能做些什麼來動態刷新我的函數中的標籤?

+0

更換Application->ProcessMessages()現在我真的不知道這個生成器或firemonkey但通常C++是不夠快,所以你的眼睛無法看到UI的變化。您確定要查詢正在運行至少足夠長〜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。

包括FMX.Platform.Win.hppUpdateWindow(Platform::Win::WindowHandleToPlatform(Handle)->Wnd)

+0

謝謝!有用!離開'Application-> ProcessMessages()'離開# – Dylan

+0

!如果你只是想重新繪製UI,可以使用各個控件的Repaint()方法,甚至是Form本身來處理待處理的繪製操作。使用'InvalidateRect()'方法來表示需要重繪的控件。 –

+0

@RemyLebeau:我也試過這個。但該控件不會立即重新繪製。 'TForm'也沒有'Repaint()'方法。 –