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

fmx Popmenu ниже button как?


rustam_d

Вопрос

DelphiXE8 upd1, Android

 

На vcl реализовывается за 15 сек...но это же fmx...

Взял пример из Делфи - FP := Button1.LocalToAbsolute(FP); а он оказался левым,

т.к. отображается черти где но не под кнопкой...да ничего я привык уже...

 

Задача простейшая, а тут затык... Вот кнопка прижатая на панели вправо у меня, с 3 точками иконкой.

Если юзаете дроид то знаете что в 99% это popup. Вот хочу того же.

 

Прошу поделиться у кого такой функционал реализован красиво и идеально?

Нажать на кнопку и popup снизу...

 

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

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

  • 0
  • TPopup.Placement
  • TPopup.PlacementTarget

Ярослав, понимаю мало времени...но этот экзотический компонент не получается правильно юзать с PopupMenu.

Кинул на форму, выставил

    Popup1.PlacementTarget = Speedbutton1

    Popup1.Popupmenu = Popupmenu1

по нажатию вызываю Speedbutton1 вызываю Popup1.Popup.

Никакой реакции...

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

по нажатию вызываю Speedbutton1 вызываю Popup1.Popup.

Никакой реакции...

 

 

TPopup - это "заготовка" для создания соответствующих компонентов.

 

PopupMenu можно вызвать так:

procedure TForm1.Button1Click(Sender: TObject);
var
  P: TPointF;
begin
  P := (Button1 as IControl).LocalToScreen(Button1.LocalRect.TopLeft);
  PopupMenu1.PopupComponent := Button1;
  PopupMenu1.Popup(P.X, P.Y + Button1.Height);
end;
Изменено пользователем FIL
Ссылка на комментарий
  • 0

 

TPopup - это "заготовка" для создания соответствующих компонентов.

 

PopupMenu можно вызвать так:

procedure TForm1.Button1Click(Sender: TObject);
var
  P: TPointF;
begin
  P := (Button1 as IControl).LocalToScreen(Button1.LocalRect.TopLeft);
  PopupMenu1.PopupComponent := Button1;
  PopupMenu1.Popup(P.X, P.Y + Button1.Height);
end;

на win32 только пашет, в Андроид никакой реакции...

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

В андроиде и iOS вроде нету PopupMenu

Вы про платформу? Или FMX? В платформе есть...зайдите в gmail и справа 3 точки...вот типа того надо.

В fmx то вроде компилируется...иначе зачем они там...короче пока не победил popupmenu...

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

Я про FireMonkey

Да верно нет в fmx+андроид...но среда почему то пропустила...

А есть ли пример как можно подобное в popup реализовать?

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

1. TLayout + TListBox

2. TMultiView +TListBox

Вариантов может быть куча, просто BringToFront и задать правильные Position.X/Y

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

1. TLayout + TListBox

2. TMultiView +TListBox

Вариантов может быть куча, просто BringToFront и задать правильные Position.X/Y

Это "тяжелые" компоненты...думал об этом. Но спасибо за ответ ).

меньше всего ожидал что fmx мне праздник устроит с простейшим попапом...

Сделал пример на кнопках, изврат не хилый получился...но работает ). Критика приветствуется.

(там где смайл это b со скобкой)

 

  public
    { Public declarations }
     pop : TPopup;
    procedure Popclick(Sender: TObject);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.Popclick(Sender: TObject);
begin
  ShowMessage(TButton(Sender).Text);
  pop.IsOpen := false;
end;
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  pop.Placement := TPlacement.plMouse;
  pop.Popup;
end;
 
procedure TForm1.FormShow(Sender: TObject);
var
  b : TButton;
begin
  pop := TPopup.Create(self);
  pop.Parent:= self;
  pop.Width := 200;
  pop.Height := 300;
  pop.PlacementRectangle:= TBounds.Create(RectF(0,0,200,300));
 
  b := TButton.Create(Self);
  b.Align := TAlignLayout.Top;
  b.TextSettings.HorzAlign := TTextAlign.Leading;
  b.Text := 'Menu1';
  b.OnClick := Popclick;
  pop.AddObject( B);
 
  b := TButton.Create(Self);
  b.Align :=TAlignLayout.Top;
  b.TextSettings.HorzAlign := TTextAlign.Leading;
  b.Text := 'Menu2';
  b.OnClick := Popclick;
  pop.AddObject( B);
end;
Изменено пользователем rustam_d
Ссылка на комментарий
  • 0

Вариант с ListBox:

var
  Form1: TForm1;
  Popup: TPopup;
  ListBox: TListBox;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  Popup := TPopup.Create(nil);
  with Popup do
  begin
    PlacementTarget := Button1;
    Placement := TPlacement.Bottom;
    Width := Button1.Width;
    Parent := Button1;
  end;

  ListBox := TListBox.Create(nil);
  with ListBox do
  begin
    Align := TAlignLayout.Client;
    Items.DelimitedText := 'Item1, Item2, Item3, Item4, Item5';
    OnItemClick := ListBoxItemClick;
    Parent := Popup;

    Popup.Height := ListItems[0].Height * Items.Count + BorderHeight;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ListBox := nil;
  Popup := nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListBox.ItemIndex := -1;
  Popup.IsOpen := True;
end;

procedure TForm1.ListBoxItemClick(const Sender: TCustomListBox; const Item: TListBoxItem);
begin
  Popup.IsOpen := False;
  ShowMessage(Item.Text);
end;

Ну а при желании можно сделать что-то вроде этого: http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-2-tedit-with-autocomplete-ru/

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

Вариант с ListBox:

Не плохо. Но в моем варианте в Tag я храню индексы или ID, также у меня Меню с иконками, т.к. подключил images. Вообщем какой и должен быть PopupMenu полноценный.

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

у Sarina Dupont в блоге есть решение для вывода попап меню с помощью listbox

посмотрел...в подметки не годиться тому что фил тут написал...

я подкинул у себя связку с imagelist и ID...красота...

    Items.Add(aBtn_text);
    ItemByIndex(Items.Count-1).ImageIndex := aImg_index;
    ItemByIndex(Items.Count-1).Tag := aId;
 
эх еще бы как то фон задать...видели те юзерам не нравиться как текст налагается...блин знали бы как это делается через одно место ))...
Ссылка на комментарий
  • 0

Добавил фон через тень. Ничего так получилось. Может кому пригодиться.

 
uses FMX.Effects;
with TShadowEffect.Create(pListBox) do Parent := pListBox;
Изменено пользователем rustam_d
Ссылка на комментарий

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

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

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

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

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

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

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

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

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

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