2016-05-05 5 views
0

У меня есть панель состояния с 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?

+0

Если у вас есть доступ к исходному коду VCL, посмотреть на реализацию 'TStatusBar.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; 

 Смежные вопросы

  • Нет связанных вопросов^_^