Перейти к содержанию
Fire Monkey от А до Я
  • 0

Есть ли механизмы определения видимости контрола?


xenon54

Вопрос

Мне нужно знать, виден ли контрол в данный момент на экране. Т.е.

  1. Visible должен быть True;
  2. Абсолютные позиции должны входить в экран;
  3. Контрол не загораживают другие контролы полностью.

Мб есть уже встроенные механизмы, ведь на сколько я знаю как раз по таким условиям выгружаются загружаются стили?

Изменено пользователем Brovin Yaroslav
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

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

 

хотя я могу и ошибаться. 

Ссылка на комментарий
  • 0
  • Модераторы

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

стили выгружаются точно, не раз писали на форуме! но доступны ли для разработчиков эти методы, не известно

Ссылка на комментарий
  • 0
  • Администраторы

Полной поддержки нету.

По первому пункту вам пригодится метод TControl.ParentedVisible. Он проверяет по дереву вверх от текущего контрола, не скрыт какой родитель (проверка только на Visible)

 

Остальные придется реализовывать самостоятельно. Так как это не тривиальная задача и доволно трудоемкая по выполнению. Здесь много условий, которые могут повлиять на конечную видимость контрола:

  1. Прозрачность
  2. Клиппинг
  3. Видимость всех конролов по цепочке вверх (родители)
  4. Возможность перекрытия контрола контролов другой ветки контролов.

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

Ссылка на комментарий
  • 0

Ну я в общем-то и спросил насчет встроенных механизмов, ибо реализация как раз этих 4 пунктов очень емкая задача в плане процессорного времени. Спасибо за ответ.

Ссылка на комментарий
  • 0

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

Изменено пользователем haword
Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...