Нужно ли очищать строку состояния перед установкой нового содержимого?

#delphi

#delphi

Вопрос:

Выполняет ли вызов

 Statusbar.Panels[0].Text := 'new text';
  

автоматически удалять предыдущее содержимое строки состояния или вам нужно сначала удалить предыдущее содержимое в коде?

Комментарии:

1. Любое назначение (через := ) полностью заменяет исходные данные новыми данными. Это очень стандартные основы программирования, и одна из самых первых вещей, которые вы должны были изучить.

2. Строка состояния выполняет всю обработку текста за вас, поэтому, как только вы обновите свойство, элемент управления перерисует себя с использованием фактических данных. Напротив, панель, нарисованная владельцем, требует, чтобы вы стерли фон перед рисованием нового содержимого.

3. Видел много примеров предварительной очистки, которые заставили меня wonder.So , тот, кто опубликует ответ…

4. @JerryDodge Вы можете делать много волшебных вещей с установщиками свойств, так что это зависит от реализации. Но вы правы в этом случае и в текущей реализации.

5. Мне кажется, вы могли бы проверить это самостоятельно примерно за 30 секунд с новым пустым приложением и строкой состояния. Есть ли причина, по которой вы не можете этого сделать? И разве эти 30 секунд не будут даже быстрее, чем время, которое вы потратили на ввод своего вопроса здесь и форматирование кода?

Ответ №1:

Попробовать это, вероятно, будет быстрее, чем задавать вопрос здесь 🙂

Но да, предыдущее содержимое очищается, если вы задаете новый текст.

Однако ваш код не сразу отображает текст, поэтому, если вы находитесь в цикле, вы не увидите, что текст обновляется. Если вы хотите принудительно отобразить свой новый текст, вы можете позвонить statusbar.repaint . Просто не вызывайте его чаще 10 раз в секунду, иначе вы заметите, что ваш цикл замедляется.