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

PopUp и Canvas


Ильдар

Вопрос

График отрисовывается на канве ректангла по таймеру.. 

Создаем PopUp меню: 

    PopUp:= TPopUpMenu.Create(AOwner);
    PopUp.Parent:= TFMXObject(AOwner);

    ItemFormSet:= TMenuItem.Create(PopUp);
    ItemFormSet.Parent:= PopUp;
    ItemFormSet.Tag:= 1;
    ItemFormSet.text:= 'Item 1';
    ItemFormSet.OnClick:= self.MenuClicks;

   .....

    ItemLegend:= TMenuItem.Create(PopUp);
    ItemLegend.Parent:= PopUp;
    ItemLegend.Tag:= 3;
    ItemLegend.text:= 'Item 3';
    ItemLegend.OnClick:= self.MenuClicks;

    Rectangle.PopupMenu:= self.PopUp;

При вызове PopUp правой клавишей - получаем вот такой "чистый" прямоугольник в левом верхнем углу. Соответственно он исчезает только при следующей перерисовке кадра. (даже если перерисовывать с высокой частотой, все равно при вызове меню видно мелькание в левом углу). Такое ощущение, что при вызове меню - оно создается и отображается там, затирая под собой канву а потом перемещается к координатам мыши.

Если в меню PopUp'a содержится один item - прямоугольника нет. Начиная с добавления второго - он появляется и чем больше Item'ов тем он больше в высоту.  

Собственно вопрос в том, как от этого эффекта избавиться?

PopUp.jpg

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

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

  • 0

Не пойдет,

1) При присваивании nil'a по вызову меню затирается вся канва ректангла.

2) Если АOwner другой компонент - ситуация та же, пустой прямоугольник в левом верхнем углу.

3) Если AOwner другой невидимый компонент - проблемы с канвой ректангла нет, все работает отлично. Но возникает новая штука - при наведении на айтемы меню - они не подсвечиваются.

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

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

Попробую дома пересобрать в другой версии среды. 

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

Можете сами рисовать PopUp на той же канве. Любой формы, цвета и т.д. По событиям мыши переприсваивать булевы переменные показать/скрыть PopUp, по координатам курсора определять над каким Item находится курсор мыши и т.д. 

Да, это более длинный подход, зато более универсальный.

Ссылка на комментарий
  • 0
11 часов назад, Alex7wrt сказал:

Можете сами рисовать PopUp на той же канве. Любой формы, цвета и т.д. По событиям мыши переприсваивать булевы переменные показать/скрыть PopUp, по координатам курсора определять над каким Item находится курсор мыши и т.д. 

Да, это более длинный подход, зато более универсальный.

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

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

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

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

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

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

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

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

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

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

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

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