• 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

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


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

6 ответов на этот вопрос

  • 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 находится курсор мыши и т.д. 

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

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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