Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];

Вниз

Ширина выпадающего 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.048 c
14-1091181010
Mellon
2004-07-30 13:50
2004.08.15
Explorer - 100 % CPU почему Эксплорер время от времени


6-1087338211
Ko
2004-06-16 02:23
2004.08.15
Узнать и изменить статус сетевого соединения


4-1089118392
Wistler
2004-07-06 16:53
2004.08.15
Работа с пользователями в домене WinNT


1-1091180896
fylhtq
2004-07-30 13:48
2004.08.15
Проблема с кириллицей и буфером обмена


14-1090820609
syte_ser78
2004-07-26 09:43
2004.08.15
Имя пашины и логин пользователя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский