C++ Builder:刷新 FireMonkey 可视化组件

问题描述 投票:0回答:2

我对 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() 但只显示最后一个文本。 我该怎么做才能动态刷新函数中的标签?

c++ c++builder firemonkey
2个回答
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()
。您可以在 Internet 上找到许多关于此的文章和讨论。当您使用 VCL 时,存在用于控制类型
Update
的方法
TWinControl
,它调用 WinAPI 的函数
UpdateWindow
。 Firemonkey 确实有类似的功能,但仅限于 Windows。

包括

FMX.Platform.Win.hpp
并将
Application->ProcessMessages()
替换为
UpdateWindow(Platform::Win::WindowHandleToPlatform(Handle)->Wnd)


0
投票

我开发了一个“FMX 肮脏的把戏”:

TabbedForm->Width = xxx + 1;
TabbedForm->Width = xxx;
© www.soinside.com 2019 - 2024. All rights reserved.