У меня есть панель состояния с 3 панелями. Когда я изменяю текст их во время выполнения, он не изменяется в первом (индекс 0).Обновить текст в панели состояния не отображает изменения в первой панели с другой используемой темой VCL
Я вижу, это происходит, только если выбрана другая тема VCL (например, 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;
I попробовал это также в новом новом приложении, та же проблема.
Когда я пытаюсь отлаживать его, в Code Inspector я вижу, значение было изменено также для индекса 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;
Но до сих пор в индексе панели STATUSBAR 0 только 1
.
Примечание: Это происходит только в том случае, если используется другая тема VCL.
Эта ошибка в теме VCL? Как я могу вызвать обновление измененного текста?
UPDATE:
Когда я установил StatusBar.StyleElements := StatusBar.StyleElements - [seClient];
это работает и для первой панели. Но почему без этого он работает только для панелей с индексом> 0?
Если у вас есть доступ к исходному коду VCL, посмотреть на реализацию 'TStatusBar.StyleElements' и посмотреть на себя, почему' seClient' это делает разница. –