antarey Опубликовано 19 ноября, 2014 Поделиться Опубликовано 19 ноября, 2014 Хочу реализовать что-то типа PopUp окна. Есть главная форма и на ней SpeedButton. Вторичная форма прозрачна и на нее положил CalloutPanel Как сделать чтобы при клике на SpeedButton вторичная форма появлялась под SpeedButton frmFilter->Top=SpeedButton24->AbsoluteRect.Top; frmFilter->Left=SpeedButton24->AbsoluteRect.Left; frmFilter->Show(); Что-то не дает результата Цитата Ссылка на комментарий
0 zhukovsd Опубликовано 19 ноября, 2014 Поделиться Опубликовано 19 ноября, 2014 Есть контрол TPopup. Можно положить callout panel на него, показывать методом Popup. Brovin Yaroslav 1 Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 19 ноября, 2014 Администраторы Поделиться Опубликовано 19 ноября, 2014 У формы есть свойство FormStyle в нем нужно указать TFormStyle.Popup. В этом случае окно должно быть поверх. Цитата Ссылка на комментарий
0 antarey Опубликовано 20 ноября, 2014 Автор Поделиться Опубликовано 20 ноября, 2014 Brovin Yaroslav, об этом свойстве я уже знаю , проблема не в создании а в показе. Кнопка лежит на тулбаре - и мне надо показать окно под кнопкой. И , в не зависимости от положения главного окна попап всегда должно появляться ниже кнопки - на подобии TMS TAdvSmoothPopup Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 20 ноября, 2014 Администраторы Поделиться Опубликовано 20 ноября, 2014 Что мешает самому задать для формы позицию под кнопкой? Цитата Ссылка на комментарий
0 antarey Опубликовано 20 ноября, 2014 Автор Поделиться Опубликовано 20 ноября, 2014 Вот в етом то и вопрос. Я в своем первом посте привел код - но он не работает - мне надо определить абсолютные положения кнопки - а тут загвоздка Цитата Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 20 ноября, 2014 Администраторы Поделиться Опубликовано 20 ноября, 2014 Вам надо сконвертировать абсолютные координаты кнопки в экранные. О том, как это сделать ответ тут: О видах координат в FireMonkey и конвертации между ними antarey 1 Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 22 ноября, 2014 Поделиться Опубликовано 22 ноября, 2014 Сдается мне что все очень просто... По крайней мере я данным решением пользовался не раз и оно прекрасно работает. А именно: - во-первых - есть уже на форуме подобное обсуждение, и если мне не изменяет память, то было и еще! - во-вторых: (если очень грубо....) ........... 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 вашей кнопочки, а внутри обработчика то что написано выше. Типа как-то так для вашего случая) Kitty и antarey 2 Цитата Ссылка на комментарий
0 antarey Опубликовано 22 ноября, 2014 Автор Поделиться Опубликовано 22 ноября, 2014 AlexG, пасибо, буду пробовать. И как вариант - разъяснение Ярослава в 7 посте Цитата Ссылка на комментарий
0 Vitaldj Опубликовано 18 августа, 2015 Поделиться Опубликовано 18 августа, 2015 (изменено) Простите за вопрос, но не смог разобраться. Сделал все как советуют наверху, получилось. Но есть проблема. Самый первый клик и 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; Как поправить? Изменено 18 августа, 2015 пользователем Vitaldj Цитата Ссылка на комментарий
0 FIL Опубликовано 18 августа, 2015 Поделиться Опубликовано 18 августа, 2015 Попробуй задать форме Position -> Designed Цитата Ссылка на комментарий
0 AngryOwl Опубликовано 18 августа, 2015 Поделиться Опубликовано 18 августа, 2015 Можно сделать так: procedure TfmForma.FormCreate(Sender: TObject); begin inherited; Left := Screen.Size.Width - ClientWidth; Top := Screen.Size.Height - ClientHeight; {ну или где там она должна появляться} end; Kitty 1 Цитата Ссылка на комментарий
Вопрос
antarey
Хочу реализовать что-то типа PopUp окна.
Есть главная форма и на ней SpeedButton.
Вторичная форма прозрачна и на нее положил CalloutPanel
Как сделать чтобы при клике на SpeedButton вторичная форма появлялась под SpeedButton
Что-то не дает результата
Ссылка на комментарий
11 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.