Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2008, 10:23   #1
Teen4jump
Пользователь
 
Аватар для Teen4jump
 
Регистрация: 19.06.2007
Сообщений: 88
По умолчанию PopupMenu

Как селать, что бы PopupMenu всплывало на границе с кнопкой.... Как в MainMenu??? Если выпадает вниз -- на нижней границе кнопки, если вверх - на верхней.
Изображения
Тип файла: jpg Image1.jpg (17.9 Кб, 215 просмотров)
Teen4jump вне форума Ответить с цитированием
Старый 12.03.2008, 10:41   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Можно обработать нажатие правой клавиши мышки и вызвать меню самому в любом месте:

PopupMenu1.Popup(X, Y);
alexBlack вне форума Ответить с цитированием
Старый 12.03.2008, 10:56   #3
Teen4jump
Пользователь
 
Аватар для Teen4jump
 
Регистрация: 19.06.2007
Сообщений: 88
По умолчанию

Я так и делаю. К примеру, если меню выпадает вниз, то оно касается границы кнопки, если выпадает вверх, то уже не получается ровно на границе кнопки. Надо чтобы получалося как на картинке, только с PopupMenu..
Teen4jump вне форума Ответить с цитированием
Старый 12.03.2008, 11:56   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Может с вычислением позиции какая-то путаница. На код можно глянуть ?
alexBlack вне форума Ответить с цитированием
Старый 12.03.2008, 12:59   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Если вызывать методом Popup, то оно от курсора или вверх или вниз, система сама решает. Нужно самому перед вызовом определять влезет ли меню на экран, и в какую сторону не влезает. Если не влезет то переопределить координаты отняв или высоту или ширину кнопки или и то и другое.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 12.03.2008, 13:11   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Нужно самому перед вызовом определять влезет ли меню на экран, и в какую сторону не влезает. Если не влезет то переопределить координаты отняв или высоту или ширину кнопки или и то и другое.
Не поможет, всеравно будут глюки. Например, меню вылазит вниз за экран на 1 пиксел, мы вычитаем высоту кнопки 20 пикселов, теперь оно входит на экран, открывается вниз и закрывает кнопку.
Код:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  P: TPoint;
begin
  if Button <> mbRight then exit;
  P.X:=Button1.Left;
  P.Y:=Button1.Top+Button1.Height;
  P:=ClientToScreen(P);
  if (P.Y+PopupMenu1.Items.Count*17+4) >= Screen.Height then P.Y:=P.Y-Button1.Height;
  PopupMenu1.Popup(P.X,P.Y);
end;
Нужно как-то принудительно открывать меню вверх или вниз...
_Dmitry вне форума Ответить с цитированием
Старый 12.03.2008, 13:25   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
Не поможет, всеравно будут глюки. Например, меню вылазит вниз за экран на 1 пиксел, мы вычитаем высоту кнопки 20 пикселов, теперь оно входит на экран, открывается вниз и закрывает кнопку.
Упс, ошибочка вышла. Не высоту кнопки нужно вычитать, а высоту меню + высота кнопки.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 12.03.2008, 13:34   #8
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Ха, теперь работает
Код:
  if (P.Y+PopupMenu1.Items.Count*17+4) >= Screen.Height then
    P.Y:=P.Y-Button1.Height-PopupMenu1.Items.Count*17-4;
_Dmitry вне форума Ответить с цитированием
Старый 12.03.2008, 13:36   #9
Teen4jump
Пользователь
 
Аватар для Teen4jump
 
Регистрация: 19.06.2007
Сообщений: 88
По умолчанию

Когдато на этом форуме скачал чат.... Вот там меню выпадает так, как мне надо. Вот ссылка:
http://programmersforum.ru/attachmen...9&d=1196394144
Teen4jump вне форума Ответить с цитированием
Старый 12.03.2008, 13:41   #10
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
Сообщение от Teen4jump Посмотреть сообщение
Когдато на этом форуме скачал чат.... Вот там меню выпадает так, как мне надо.
Нет, работает не так, как надо: тот же самый глюк, см. пост #6
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu Патрон Общие вопросы Delphi 7 15.06.2008 14:04
PopupMenu и gif Dj_smart Мультимедиа в Delphi 6 06.06.2008 11:33
PopupMenu TaTT DoGG Компоненты Delphi 13 23.05.2008 13:19
PopupMenu Михаил Юрьевич Общие вопросы Delphi 6 03.05.2008 18:46
Про PopupMenu Михаил Юрьевич Общие вопросы Delphi 2 23.02.2008 23:38