Запустите новое приложение для нескольких устройств и поместите на него кнопку. Объявите переменную-член в форме POP: TPopupMenu
. Дважды нажмите кнопку и введите следующий код в событие:
var
MI : TMenuItem;
I : Cardinal;
begin
FreeAndNIL(POP); // POP is a member variable of the form
POP:=TPopupMenu.Create(Self);
FOR I:=1 TO 10 DO BEGIN
MI:=TMenuItem.Create(POP);
MI.Text:=IntToStr(I);
MI.OnClick:=Button1Click;
POP.AddObject(MI)
END;
POP.Popup(100,100)
end;
(я знаю, что назначение Button1Click для OnClick приведет к рекурсивным вызовам, но я включил его, чтобы исключить предположения об отсутствии событий, связанных с TMenuItem
).
Должно появиться меню, когда вы нажимаете кнопку, но это не так (на самом деле, вроде как, - всплывает всплывающее меню шириной 0 пикселей, которое вы можете проверить, если кнопка не работает) светятся, когда вы наводите курсор мыши, пока не щелкнете где-нибудь, чтобы «закрыть» это (невидимое) всплывающее меню).
Я вижу (если проследить до POP.PopUp
), что он переводит TMenuItem
в новый тип всплывающего меню и начинает вычислять размер всплывающего окна. Но когда он перебирает элементы, он пропускает часть, которая обрабатывает ширину текстов элементов меню (там нет «TextObject», т. Е. Это NIL).
Если я делаю подобный код в VCL, он работает нормально, так что же отличается в FMX, что делает это не работает? Нужно ли "фиксировать" TPopupMenu
изменения или как?