#delphi
#delphi
Вопрос:
Выполняет ли вызов
Statusbar.Panels[0].Text := 'new text';
автоматически удалять предыдущее содержимое строки состояния или вам нужно сначала удалить предыдущее содержимое в коде?
Комментарии:
1. Любое назначение (через
:=
) полностью заменяет исходные данные новыми данными. Это очень стандартные основы программирования, и одна из самых первых вещей, которые вы должны были изучить.2. Строка состояния выполняет всю обработку текста за вас, поэтому, как только вы обновите свойство, элемент управления перерисует себя с использованием фактических данных. Напротив, панель, нарисованная владельцем, требует, чтобы вы стерли фон перед рисованием нового содержимого.
3. Видел много примеров предварительной очистки, которые заставили меня wonder.So , тот, кто опубликует ответ…
4. @JerryDodge Вы можете делать много волшебных вещей с установщиками свойств, так что это зависит от реализации. Но вы правы в этом случае и в текущей реализации.
5. Мне кажется, вы могли бы проверить это самостоятельно примерно за 30 секунд с новым пустым приложением и строкой состояния. Есть ли причина, по которой вы не можете этого сделать? И разве эти 30 секунд не будут даже быстрее, чем время, которое вы потратили на ввод своего вопроса здесь и форматирование кода?
Ответ №1:
Попробовать это, вероятно, будет быстрее, чем задавать вопрос здесь 🙂
Но да, предыдущее содержимое очищается, если вы задаете новый текст.
Однако ваш код не сразу отображает текст, поэтому, если вы находитесь в цикле, вы не увидите, что текст обновляется. Если вы хотите принудительно отобразить свой новый текст, вы можете позвонить statusbar.repaint
. Просто не вызывайте его чаще 10 раз в секунду, иначе вы заметите, что ваш цикл замедляется.