Форум: "Основная";
Текущий архив: 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.036 c