Перейти к содержанию
  • Регистрация
  • 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

Костыль:
создавайте PopUp с AOwner=nil или AOwner должен быть каким-нибудь невидимым компонентом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Не пойдет,

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

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

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

Изменено пользователем Ильдар

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ок, создайте его заранее, и в нужные моменты просто делайте видимым/невидимым.

В чем причина такого странного поведения - я хз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
11 часов назад, Alex7wrt сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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


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

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

×
×
  • Создать...