Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.15;
Скачать: CL | DM;

Вниз

Ширина выпадающего PopupMenu   Найти похожие ветки 

 
X9 ©   (2004-07-30 18:42) [0]

Здравствуте!
Я столкнулся со следующей проблемой: например, при нажатии на кнопку выпадает PopupMenu, кнопка находится на ToolBar"е и поэтому координаты её не зафиксированны. Если при выполнении этого кода
-----------------
var r: TRect;
begin
R := GetWindowRect(Button1.Handle, r);
PopupMenu1.Popup(r.Left, r.Bottom);
end;
-----------------
расстояние от левого края кнопки до правого конца экрана больше размера выпадающей менюшки, то всё нормально. Если же наоборот -то при выпадании правый край меню совпадает с левым краем кнопки. Мне же хочется, что бы при появлении меню, если правый край кнопки находится за правой границей экрана, его (меню) правый край совпадал с правой границей экрана, но IMHO для этого нужно узнать ширину меню ещё до выпадания, а затем выполнить PopupMenu1.Popup(Screen.Width - Ширина_PopupMenu, r.Bottom). Но ширина меню также не фиксирована, ибо программа использует языковые модули (+ в системе пользователя могут быть установлены шрифты и их размеры, отличные от тех, которые принимались в расчёт при разаработке приложения). Скажите, пожалуйста, как можно узнать ширину ещё не выпавшего PopupMenu? Всем заранее большое спасибо!


 
Кириешки ©   (2004-07-30 18:49) [1]

Ширина меню зависит от самого длинного элемента меню - то есть от надписи в нем
Можно в принципе спросить размер самого длинного элемента меню по

например Length(). Дальше я думаю додумать трудности не рпедставляет.


 
parovoZZ ©   (2004-07-30 19:10) [2]

Ну, допустим, на апях можно менюшке указать, с какой стороны от указанной точки выпадать. На VCL такого флага нет?


 
X9 ©   (2004-07-30 20:38) [3]

2 Кириешки
Но ведь ширина менюшки зависит не только от длины надписи (Да и ШИРИНА надписи зависит от шрифта), но и от ShortCut и других факторов.
2 parovoZZ
> Ну, допустим, на апях можно менюшке указать, с какой стороны
> от указанной точки выпадать. На VCL такого флага нет?

Вы это о Alingment? Увы, это не то, что мне нужно. Есть ещё предложения? Помогите, пожалуйста, у меня проект стоит.


 
olookin ©   (2004-07-30 20:49) [4]

А если попытаться в рантайме изменять PopupMenu.Alignment? Как я понял из хелпа - это может помочь...

Set Alignment to control the placement of the popup menu. Alignment controls whether the menu appears to the left of the mouse, to the right of the mouse, or centered over the mouse.

By default, the menu appears with its top left corner under the mouse (paLeft).


 
Кириешки ©   (2004-07-30 20:54) [5]

>X9 ©   (30.07.04 20:38) [3]

Полностью согласен. Я видь не вижу заготовку программы вопрошающего, поэтому написал обобщенно.


 
parovoZZ ©   (2004-07-30 21:26) [6]

Есть ещё структура TMenuItemInfo, из которой можно выудить инфу,  но это у же к мастерам.


 
X9 ©   (2004-07-31 07:17) [7]

Значить так...:)
case Alignment of
 paLeft: Если места хватает, то меню выпадает СПРАВА от координаты, указанной в Popup(X, Y);
 paRight: Выпадает СЛЕВА от вышеуказанной координаты;
 paCenter: Центр выпавшей менюшки совпадает с вышеописанной координатой;
end;
Итог: необходимый результат не достигнут.
2 > parovoZZ ©   (30.07.04 21:26) [6]
> Есть ещё структура TMenuItemInfo, из которой можно выудить
> инфу,  но это у же к мастерам.

Ну зачем же к Мастерам? Всё очень просто, с помощью GetMenuItemInfo, но в данной структуре я не нашёл ширины меню. А вот GetMenuItemRect - помогло! Всем большое спасибо!


 
X9 ©   (2004-07-31 08:04) [8]

oops! GetMenuItemRect срабатывает только при выпавшей менюшке, что не есть хорошо. Кто нибудь знает алгоритм, по которому Window$ вычисляет ширину меню? Мастера, отзовитесь!


 
X9 ©   (2004-07-31 20:44) [9]

Up!


 
X9 ©   (2004-08-01 09:31) [10]

Up!


 
X9 ©   (2004-08-02 07:20) [11]

Ну неужели никто не знает?! Мастера, АУ!!!



Страницы: 1 вся ветка

Текущий архив: 2004.08.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
6-1087077599
RAshka
2004-06-13 01:59
2004.08.15
проверка открытых портов (в частности UDP)


3-1090240496
Aslan
2004-07-19 16:34
2004.08.15
Как с помощью SQL добавить данные в поле типа Memo?


4-1088780499
vajo
2004-07-02 19:01
2004.08.15
процент копирования файла


1-1091413178
TotalMod
2004-08-02 06:19
2004.08.15
CopyRect, Canvas


1-1091133724
nick_mas
2004-07-30 00:42
2004.08.15
Как в Form.Caption поместить текст с правой и левой стороны?