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

Как заставить обычную форму отображаться как Popup?


antarey

Вопрос

Хочу реализовать что-то типа PopUp окна.

Есть главная форма и на ней SpeedButton.

Вторичная форма прозрачна и на нее положил CalloutPanel

Как сделать чтобы при клике на  SpeedButton вторичная форма появлялась под  SpeedButton 

 

frmFilter->Top=SpeedButton24->AbsoluteRect.Top;
frmFilter->Left=SpeedButton24->AbsoluteRect.Left;
frmFilter->Show();

Что-то не дает результата

 

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

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

  • 0
  • Администраторы

У формы есть свойство FormStyle в нем нужно указать TFormStyle.Popup. В этом случае окно должно быть поверх.

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

Brovin Yaroslav, об этом свойстве я уже знаю :) , проблема не в создании а в показе. Кнопка лежит на тулбаре - и мне надо показать окно под кнопкой. И , в не зависимости от положения главного окна попап всегда должно появляться ниже кнопки - на подобии TMS TAdvSmoothPopup

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

Вот в етом то и вопрос. Я в своем первом посте привел код - но он не работает - мне надо определить абсолютные положения кнопки - а тут загвоздка :(

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

Вам надо сконвертировать абсолютные координаты кнопки в экранные. О том, как это сделать ответ тут: О видах координат в FireMonkey и конвертации между ними

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

Сдается мне что все очень просто... По крайней мере я данным решением пользовался не раз и оно прекрасно работает. А именно:

- во-первых - есть уже на форуме подобное обсуждение, и если мне не изменяет память, то было и еще!

- во-вторых: (если очень грубо....)

...........
var
  p : TPointF;
  function GetMousePos: TPointF;
  var
    Platform: IInterface;
  begin
    Result.Create(0, 0);
    Platform := TPlatformServices.Current.GetPlatformService(IFMXMouseService);
    if Platform <> nil then
      Result := (Platform as IFMXMouseService).GetMousePos;
  end;
begin
  p := GetMousePos;
  ваша_форма.Left := round(p.X);  // тут уж вы сами решайте - как вам ее "сдвинуть"
  ваша_форма.Top := round(p.Y) + ваша_форма.Height;  // ну аналогично сдвинуть по вертикали.....
  ваша_форма.Show;
end;

только это все грубо. сами решайте что и куда сдвигать и что еще учитывать.

 

Т.е. надо обрабатывать событие OnClick вашей кнопочки, а внутри обработчика то что написано выше.

Типа как-то так для вашего случая)

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

Простите за вопрос, но не смог разобраться. Сделал все как советуют наверху, получилось. Но есть проблема. Самый первый клик и Popup форма показывается как была сделана в дизайн тайме: в левом верхнем углу. В последующие клики - все нормуль. Возле формы abc7. Вот код:

 

 


procedure Tabc7.Button3Click(Sender: TObject);
var
  p : TPointF;
  function GetMousePos: TPointF;
  var
    Platform: IInterface;


  begin
    Result.Create(0, 0);
    Platform := TPlatformServices.Current.GetPlatformService(IFMXMouseService);
    if Platform <> nil then
      Result := (Platform as IFMXMouseService).GetMousePos;
  end;
begin
  p := GetMousePos;
  abc8.Left := round(p.X); 
  abc8.Top := round(p.Y) ; 
  abc8.Show;


end;

Как поправить?

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

Можно сделать так:

procedure TfmForma.FormCreate(Sender: TObject);
begin
  inherited;
  Left := Screen.Size.Width - ClientWidth;
  Top  := Screen.Size.Height - ClientHeight;
  {ну или где там она должна появляться}
end;
Ссылка на комментарий

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

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

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

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

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

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

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

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

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

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