Перейти к содержанию
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 пользователей онлайн

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