В чем разница между обновлением, обновлением и перерисовкой?

38

Я не знаю, какой из этих трех методов мне больше всего подходит. Все они работают для меня. Кто-нибудь знает разницу между Refresh, Update и Repaint?

  • 13
    Вам и двум людям, которые проголосовали за это до сих пор: я знаю, что открытие справки Delphi из IDE немного медленное, но все равно должно быть быстрее, чем запрашивать SO и ждать ответов. Ответы, которые вряд ли могут сделать что-либо, кроме цитирования из справки.
  • 6
    Поиск в онлайн-документации, с Google также является еще одним вариантом. docs.codegear.com
Показать ещё 11 комментариев
Теги:
vcl

3 ответа

39
Лучший ответ

Согласно онлайн-документации.

Refresh - Перекрашивает элемент управления на экране.

Метод обновления вызова, чтобы перерисовать немедленно контролировать. Обновить вызовы Перерисовать метод. Используйте Refresh и Перекрашивать методы взаимозаменяемо.

Repaint - заставляет элемент управления перерисовывать изображение на экране.

Переадресация вызова, чтобы заставить элемент управления перекрасить его изображение немедленно. Если Свойство ControlStyle включает csOpaque, сам контроль красит непосредственно. В противном случае перерисовать метод вызывает метод Invalidate и затем метод Update, чтобы любой видимые части элементов управления ниже управление будет также перекрашено.

Update - немедленно обрабатывает любые ожидающие сообщения с краской.

Обновление вызова, чтобы заставить элемент управления перерисовываться раньше, возможно отнимает много времени место. Используйте Update для немедленного предоставления обратная связь с пользователем, который не может ждать для сообщения с краской Windows прибыть.

Обновление не отменяет но просто заставляет перекрашивать любых регионов, которые уже были аннулированной. Вызовите перерисовку вместо аннулировать контроль.

32

На ваш вопрос уже ответили, но если вам нужна хорошая производительность и меньше мерцания, вы должны вместо этого вызвать Invalidate. Это позволяет Windows оптимизировать процесс рисования.

Invalidate - Полностью перерисовать элемент управления.

Использовать Invalidate, когда весь элемент управления необходимо перекрасить. Когда больше, чем один регион в рамках контроля перерисовка, Invalidate приведет к полное окно, которое должно быть перекрашено в один проход, избегая мерцания, вызванного путем избыточных рецензий. Здесь нет штраф за исполнение Недействительно несколько раз до контроль фактически перекрашен.

3

В соответствии с уставом (CBuilder 6) VCL:

Invalidate "Invalidate информирует элемент управления о необходимости перекрашивания всей его поверхности. Вызов Invalidate может предотвратить мерцание, вызванное серией частичных рецензий. контроль фактически перекрашен".

Фактическая перекраска не происходит до тех пор, пока элемент управления не будет обновлен. Чтобы принудительно перерисовать, вызовите перерисовку вместо этого.

Перерисовать "TWinControl:: Repaint вызывает метод Invalidate, а затем метод Update, чтобы перерисовать элемент управления" (небольшой парафраз).

(К сожалению, более старая ссылка лучше и полнее, чем новая ссылка, которую я имею (CBuilder 2007).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню