![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Prok12 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.11.2011 Репутация: 3 Всего: 3 |
Никогда не увлекался рюшечками и украшательствами в оформлении приложения, но... Перешёл с XE8 на Tokyo 10.2.2. И тут заметил, что пункты (Items) в MainMenu стали отображаться как-то не так, как было в XE8. Знаю, что в Tokyo что-то поломали в DPI. У меня, например, экран (там где разрабатывается приложение) с высоким разрешением, так что в самой среде Windows задан пользовательский масштаб 125% (120 DPI). Теперь (Tokyo 10.2.2) масштабирование форм даже на том же компе, где идёт разработка, выполняется неверно в режиме для форм Scaled=True. Потому ставлю для всех форм Scaled=False, а в конструкторе каждой формы (событие OnCreate) добавляю
То есть, при переходе на другой комп масштабирование выполняется "вручную". Но это пол-беды: проблема, решаемая сравнительно просто... ![]() Самое неприятное, что в MainMenu (оно у меня рисовалось в дефолтном режиме OwnerDraw=False) те пункты, которые были с иконками, отображаются крупным шрифтом, а те что без иконок - мелким (обычным, как надо). Иконки задавались в свойствах Bitmap для Items в меню, 16х16. Проблема управления шрифтами Menu - известная, поднималась неоднократно, например для Delphi Seattle : https://stackoverflow.com/questions/3302009...-delphi-seattle Далее по пунктам. ---------------------------- 1) Первое что пришло в голову, перейти в режим отрисовки главного меню OwnerDraw=True. Всё Меню нарисовалось одинаковым шрифтом, но...очень крупным. Управлять шрифтом по-простому - нечем. ![]() ---------------------------- 2) Полазив по просторам мировой паутины, пытаюсь задавать Screen.MenuFont.Size. Да, поначалу помогло. Но потом выяснилось, что по мере запуска других приложений на компе что-то сбивается, и снова MainMenu отрисовывается слишком крупным шрифтом. ![]() ---------------------------- 3) По совету из того же Интернета скачал RyMenu.zip. Работает, но... Во первых, не отображает иконки именно из свойства Bitmap пп. меню, а только из ImageList (что, впрочем, удобнее). Во-вторых, иконки в самой верхней строке меню (их которой раскрываются под-меню - сразу под заголовком формы), у меня вообще не отображаются, а мне и они нужны (показано на правой части прилагаемого рисунка красной стрелкой вверх). ![]() ---------------------------- 4) Выход нашёл такой. 4.1. Создаём всё MainMenu как обычно в Delphi - через Object Inspector. 4.2. Все иконки для меню 16х16 запихиваем в компонент TImageList : его надо добавить на форму и связать в Object Inspector с MainMenu; для каждого под-пункта Меню (Item) просто выбираем номер иконки из этого списка TImageList (ну это всем понятно - обычный способ). 4.3. Задаём режим отрисовки Меню OwnerDraw=True : это важно! 4.4. В разделе интерфейса основной формы (для которой Меню) сразу после uses прописываем 9 строк:
4.5. В раздел Imlementation пишем реализацию переопределённого метода AdvancedDrawItem (который мы уже в пп.4.4 "вывели из тени" на свет - Protected) :
Названия (Name) пунктов меню, для которых требуется особый шрифт, будут у вас свои, конечно. У меня в примере это FileExitItem, RunItem, DataBaseItem. Всё !! Итак, буквально 20 коротких строк кода потребовалось добавить для управления шрифтами MainMenu. ![]() Цветом шрифтов Меню, увы, так просто управлять не удастся. ![]() Вид полученного Меню в двух режимах активности его под-пунктов - на прилагаемом рисунке. Это сообщение отредактировал(а) Prok12 - 10.2.2018, 14:50 Присоединённый файл ( Кол-во скачиваний: 17 ) ![]() |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |