• 0
rustam_d

fmx Popmenu ниже button как?

Вопросы

DelphiXE8 upd1, Android

 

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

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

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

 

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

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

 

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

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

 

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


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

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

  • 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

Хорошо. Отмечу лишь, что ListBox позволяет сделать все тоже самое и даже больше.

 

 

post-1506-0-45436300-1438982839.jpg

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


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

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

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


Ссылка на сообщение
Поделиться на другие сайты
  • 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

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


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

использовать стили кто мешает? поправить стиль, делов то :)

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


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

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

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

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

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

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

Войти

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

Войти

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

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