状态栏中的更新文本未显示使用不同 VCL 主题的第一个面板中的更改

Update text in Statusbar is not showing changes in first panel with different VCL theme used

我有一个包含 3 个面板的状态栏。当我在运行时更改它们的文本时,第一个(索引 0)没有更改。

我明白了,只有选择其他 VCL 主题时才会发生这种情况 (f.e。Cyan Dusk)。

初始设计文本为:

StatusBar.Panels[0].Text := '1';
StatusBar.Panels[1].Text := '2';
StatusBar.Panels[2].Text := '3';

并且在运行时我更改了它:

StatusBar.Panels[0].Text := '11'; // this is not changed visually
StatusBar.Panels[1].Text := '22';
StatusBar.Panels[2].Text := '33';

之后我也尝试了所有这些代码,但没有任何效果:

Application.ProcessMessages;
StatusBar.Refresh;
StatusBar.Update;
Refresh;

我在空白的新应用程序中也试过了,同样的问题。

当我尝试调试它时,我在代码检查器中看到,索引 0 的值也已更改。

我也试过这个:

procedure TMainForm.StatusBarClick(Sender: TObject);
begin
  ShowMessage(StatusBar.Panels[0].Text); // 11
  ShowMessage(StatusBar.Panels[1].Text); // 22
  ShowMessage(StatusBar.Panels[2].Text); // 33
end;

但状态栏面板中索引 0 仍然只有 1

注意:只有在使用不同的 VCL 主题时才会发生这种情况。

这是 VCL 主题中的错误吗?我怎样才能唤起更新更改的文本?

更新:

当我设置 StatusBar.StyleElements := StatusBar.StyleElements - [seClient]; 时,它也适用于第一个面板。但为什么没有这个它只适用于索引 > 0 的面板?

所以,这是 VCL 主题中的错误。这解决了问题,还更新了 StatusBar.Panels[0]:

中的文本
StatusBar.StyleElements := StatusBar.StyleElements - [seClient];

Application.ProcessMessages;

StatusBar.Panels[0].Text := '11'; // now the text is updated visually
StatusBar.Panels[1].Text := '22';
StatusBar.Panels[2].Text := '33';

Application.ProcessMessages;

StatusBar.StyleElements := StatusBar.StyleElements + [seClient];

Application.ProcessMessages;