Главная страница
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.045 c
14-1091159627
Сергей Г
2004-07-30 07:53
2004.08.15
Сегодня Международный день системного администратора


3-1090378576
Dub
2004-07-21 06:56
2004.08.15
подключение модуля для SQL


1-1091092755
default
2004-07-29 13:19
2004.08.15
Динамические массивы


6-1084746834
w666w
2004-05-17 02:33
2004.08.15
ПОМОГИТЕ!!! как прикрутить к IEParser у события WebBrowser а


14-1091178545
}|{yk
2004-07-30 13:09
2004.08.15
Delphi Informant Magazine Readers Choice Awards 2004