状态栏中的更新文本未显示使用不同 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;
我有一个包含 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;