Перейти к содержанию
  • 0
wassail

[TPopupMenu] Как создать в runtime элемент меню TPopupMenu?

Вопросы

Как добавлять новыe пункты меню (в VCL был NewItem)  в TPopupMenu в режиме runtime в FMX?

В режиме проектирования всё понятно.

Спасибо.

 

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


Ссылка на сообщение

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

  • 0

Например так:

var
  RootMenuItem: TMenuItem;
  MenuItem: TMenuItem;
begin
  RootMenuItem := TMenuItem.Create(nil);
  RootMenuItem.Text := 'Item level 1';
  PopupMenu1.AddObject(RootMenuItem);

  MenuItem := TMenuItem.Create(nil);
  MenuItem.Text := 'Item level 2';
  RootMenuItem.AddObject(MenuItem);
end;

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


Ссылка на сообщение
  • 0

Хорошо, но есть одна деталь, 
В VCL добавляемый пункт , например, MenuItem, имел свойство ImageIndex для указания номера из, скажем, TImageList1, теперь есть лишь BitMap. 
Как из какого-то списка (TStyleBook?) загрузить нужную иконку для нового пункта  меню в Bitmap?
Или можно только загружать битмапы иконок  каждый по отдельности?

Отредактировал Brovin Yaroslav

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


Ссылка на сообщение
  • 0

Вот здесь "Есть ли в fmx класс TImageList?" рассказывается, как эмулировать в FMX работу отсутствующего TImageList. До версии XE7 включительно, пока только так.

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


Ссылка на сообщение
  • 0

а ничего что в рантайме битмапы, которые на менюитемах не отрисовываются вообще ?

только если на канве их самому рисовать в OnPaint

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


Ссылка на сообщение

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

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

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

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

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

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

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

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


  • Похожий контент

    • От Ильдар
      При использовании стилей (TStyleBook) не всплывают вложенные итемы. Если стиль отключить - все работает.
      Кто-то сталкивался?
      Embarcadero® Delphi 10.2 Version 25.0.26309.314
       
    • От x11
      Процедура добавления Item
       
      procedure TfmEditObject.AddPhoto(Image: TBitmap); Var item: TListBoxItem; imageV: TImageViewer; begin item := TListBoxItem.Create(lbPhotos); item.parent := lbPhotos; item.text := ''; item.Width := lbPhotos.Width; item.PopupMenu := PopupMenu1; imageV := TImageViewer.Create(lbPhotos); imageV.HitTest := False; imageV.Parent := item; imageV.Align := TAlignLayout.Client; imageV.Bitmap.Assign(image); item.SetFocus; end; У popupmenu есть 2 пункта, привязанных к Action.
       
      Gestures срабатывает на "long tap"
      procedure TfmEditObject.lbPhotosGesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); var c: IControl; ListBox: TListBox; lbxPoint: TPointF; ListBoxItem: TListBoxItem; begin if EventInfo.GestureID = igiLongTap then if (sender is TListBox) and assigned(TListBox(sender).Selected) then begin c := ObjectAtPoint(EventInfo.Location); if Assigned(c) then if Assigned(c.GetObject) then if c.GetObject is TListBox then begin ListBox := TListBox(c.GetObject); lbxPoint := ListBox.AbsoluteToLocal(EventInfo.Location); ListBoxItem := ListBox.ItemByPoint(lbxPoint.X, lbxPoint.Y); if Assigned(ListBoxItem) then PopupMenu1.Popup(lbxPoint.X, lbxPoint.Y); Handled := True; end; end; end;  
      Ставил точку останова, видно, что до строки "PopupMenu1.Popup(lbxPoint.X, lbxPoint.Y);" доходит.
      Если программа работает на Windows, то меню отображается по правой кнопке мышки, а на андроид устройстве меню не отображается по Long Tap.
       
      Как видно из кода, то меню прикручивается к ListBoxItem, а непосредственно к TListBox меню прикрутил в дизайне.
    • От Winexcel
      Собственно сабж, можно ли стилизовать бэкгрануд? И если да, то как стиль называется не подскажете?
    • От ENERGY
      Подскажите как сделать PopupMenu в TListView на мобильных системах? 
      PopupMenu там не работает, он для Windows и OSX. Нужно при долгом нажатии в TListView показывать меню.
      Может в Delphi это можно сделать проще, чем создавать TListBox и просчитывать координаты? А если по другому никак, можно пример как это сделать?
      Спасибо.
      upd: 
      Я просто думал возможно есть готовое решение, где можно просто указать в Design Time PopupMenu в TListView (как это делается в VCL) и оно будет показываться при длинном нажатии (т.е. не высчитывать самому координаты, центрируя его на экране и писать какой то код ). 
    • От Dinkin
      Добрый день!
      Необходим эффект редактирования текста через PoupMenu. То есть жму правой кнопкой мыши,появляется поуп с поле ввода текста у курсора...это возможно реализовать в FireMonkey?
    • От DirtyBorov
      Суть проблемы в том, что в WinXP (SP3), данный компонент не работает от слова совсем.  Вместо меню получаем "Abstract Error". В других ОС все нормально.
    • От PFC
      Есть класс:
      class TMyObjectInt : public TObject { private: int Value; public: __fastcall TMyObjectInt (int _Value); __fastcall ~TMyObjectInt(); }; Есть ComboBox:
      for (int i = 1; i <= 10; i++) cbxItems->Items->AddObject(IntToStr(i), new TMyObjectInt(i)); Почему при вызове ->Clear() не вызываются деструкторы для TObject'ов? Казалось бы базовый TObject замечательно для этого подходит, даже деструктор у него виртуальным объявлен.
      Я могу написать свою функцию очистки, но это потенциально приводит к ошибкам, особенно если я отдаю указатель на ComboBox за пределы своей формы.
       
      Кстати, так же ведут себя и многие другие контролы, да и в VCL было так же.
  • Последние посетители   0 пользователей онлайн

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

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