我对 C++ Builder 和 FireMonkey 有疑问。我正在创建一个与 Datasnap Rest WebService 连接的移动应用程序。有些请求有点长,所以我想显示一条等待消息。这是我的代码:
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!";
我尝试了函数 Form->Invalidate() 和 Label->Repaint() 但只显示最后一个文本。 我该怎么做才能动态刷新函数中的标签?
文本的更改必须由被请求阻塞的主线程处理。如果您不想为长请求使用单独的线程,则必须调用
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()
。您可以在 Internet 上找到许多关于此的文章和讨论。当您使用 VCL 时,存在用于控制类型 Update
的方法 TWinControl
,它调用 WinAPI 的函数 UpdateWindow
。 Firemonkey 确实有类似的功能,但仅限于 Windows。
包括
FMX.Platform.Win.hpp
并将Application->ProcessMessages()
替换为UpdateWindow(Platform::Win::WindowHandleToPlatform(Handle)->Wnd)
我开发了一个“FMX 肮脏的把戏”:
TabbedForm->Width = xxx + 1;
TabbedForm->Width = xxx;