![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Nikfel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
У меня лежит меню в ресурсах. Загружаю его так:
Я понял как обработать сообщение WM_MeasureItem и WM_DrawItem, просто надо сначала для пункта меню сделать так:
Можно ли поставить (mf_ByPosition or mf_OwnerDraw) через SetWindowLong? Тогда окно будет получать сообщения WM_MeasureItem и WM_DrawItem, но проблема в том как нарисовать на меню, а точнее никак не получается получить HDC для пункта меню, чтобы рисовать на нем. В интернете найти не смог, т.к. там все плохие варианты предлагают, а мне надо на чистом Winapi. Может кто знает как осуществить такое? Заранее спасибо. |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
хочу сказать один секрет , все варианты в конце концов работаю через винапи , так что берем вариант и смотрим что он делает , и получаем ответ , правим под себя и получаем то что хотим.... -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Nikfel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
И как же тогда перевести вот этот код на чистый WinApi:
http://delphisite.ru/faq/kak-risovat-karti...-punktakh-menyu В основном в интернете я натыкался на подобный код через: Procedure WMDrawItem(var Msg:TWMDrawItem); message wm_DrawItem; Procedure WMMeasureItem(var Msg:TWMMeasureItem); message wm_MeasureItem; Но на чистом WinApi делается по другому. |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 15 Всего: 72 |
||||
|
||||
| Nikfel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
Проблема в том как записать переменную DIS? Чтобы можно было получить DIS.HDC, чтобы рисовать на нем. Знаю что надо брать lParam, но как его записать в DIS? |
|||
|
||||
| Romikgy |
|
||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
цикл обработки сообщения есть ? вот туда и пихаешь
Добавлено через 2 минуты и 37 секунд
вот кусок из TPopupMenu -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
| Nikfel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
Romikgy, большое спасибо за пример кода, теперь становится понятнее как такое делать. Буду дальше разбираться что к чему.
|
|||
|
||||
| Nikfel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
Вот еще что мне не понятно:
Как узнать и изменить ширину окна меню? Как узнать высоту пункта меню и изменить её, т.е. может быть Separator или обычный пункт меню? |
|||
|
||||
| Nikfel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
Разобрался как изменить ширину и высоту пункта меню.
Еще бы как-то узнать что пункт меню это separator и мне надо вывести текст(с заданным шрифтом) и получить ширину и высоту текста. Просто если не трудно то напишите какие для этого функции и процедуры нужно использовать? |
|||
|
||||
| Romikgy |
|
||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
+
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||||
|
|||||||
| Nikfel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
Спасибо, буду дальше разбираться. Но вот еще что не ясно:
как закрасить всю область выпадающего меню, а не только перекрасить пункты меню? А вот как получить hdc всего выпадающего меню, а то у меня как-то не красиво получается по бокам белый фон. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
http://torry.net/pages.php?id=149
http://torry.net/pages.php?id=147 http://torry.net/pages.php?id=150 качай где FWS , там есть исходники , и разбирай как заменяют отрисовку стандартного меню своим! -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Nikfel |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
Спасибо, буду разбираться.
А как на счет такого способа рисования по всему меню:
|
|||
|
||||
| Nikfel |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 15.7.2009 Где: Kirov Репутация: нет Всего: нет |
Для рисования по всему меню лучше всего делать так:
Никак не могу разобраться с GetMenuItemInfo. Почему-то не работает вот это:
menu:=getsubmenu(getmenu(wnd),0); Где тут ошибка? функция GetMenuItemInfo всегда возвращает False, а значит не работает. |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
обработай ошибку используя GetLastError и посмотри что не в поряде -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |