Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс дек 17, 2017 8:58 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 43 сообщения ]  На страницу 1 2 3 След.
Автор Сообщение
 Заголовок сообщения: libkmenu
СообщениеДобавлено: Пт июл 31, 2015 1:08 pm 
Не в сети

Зарегистрирован: Чт янв 26, 2006 8:47 pm
Сообщения: 284
Библиотека для отображения главного и контекстных меню.

FAQ:
В первую очередь вызываем kmenu_init для задания палитры отображаемого меню.

Далее создаем объект меню используя функцию ksubmenu_new.
При помощи функций kmenuitem_new и ksubmenu_add добавляем пункты меню.
Функция kmenuitem_new понимает три типа элементов:
KMENUITEM_NORMAL - обычный пункт меню, третьим параметром kmenuitem_new примет ID кнопки, который потом пришлет библиотека по клику на этот пункт меню
KMENUITEM_SEPARATOR - рисуется разделитель
KMENUITEM_SUBMENU - пункт меню указывающий на вложенное меню, третьим параметром kmenuitem_new примет указатель на ksubmenu_t*

Для отображения главного меню окна вызываем при отрисовке окна функцию kmainmenu_draw, а также при обработке событий вызываем kmainmenu_dispatch_cursorevent.
Важно: устанавливает фильтрацию позиции курсора

Для отрисовки всплывающих контекстных меню вызываем функцию ksubmenu_draw. Обработка событий производится автономно.

Для изменения состояния пунктов меню можно изменять параметры is_enabled и is_visible объекта kmenuitem_t.
Также можно назначить свою функцию отрисовки элементов меню, изменив указатель paint объекта kmenuitem_t


Вложения:
menu.png
menu.png [ 5.13 КБ | 1918 просмотров ]
libkmenu.zip [10.11 КБ]
56 скачиваний


Последний раз редактировалось Veliant Пт фев 19, 2016 9:43 pm, всего редактировалось 1 раз.
Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 2:48 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4227
Кто может добавить меню в TextEdit?

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 3:26 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1195
В принципе, я могу, но библиотеки довольно сложно подключаются, пока целостной картины не имею.


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 12:42 pm 
Не в сети

Зарегистрирован: Чт янв 26, 2006 8:47 pm
Сообщения: 284
Небольшое косметическое изменение - добавлены стрелки для выпадающих подменю.
Исправлено пару багов
Вложение:
menu2.png
menu2.png [ 2.58 КБ | 1822 просмотра ]


Вложения:
libkmenu.zip [11.18 КБ]
55 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 1:10 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4227
Я ждал этого :)

Костя, может ты добавишь строку меню в TextEdit?
По крайней мере базовый вариант, дальше я или Pathoswithin.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 2:09 pm 
Не в сети

Зарегистрирован: Чт янв 26, 2006 8:47 pm
Сообщения: 284
Вот первичный задел
Правились t_edit, t_data, t_draw (draw_but_toolbar)
Для выхода из программы по пункту меню, в текущей реализации меню нельзя использовать id=1 (используетсяв внутренних целях для закрытия родительских выпадающих меню), придется назначать новый.
Вложение:
textedit.png
textedit.png [ 6.51 КБ | 1804 просмотра ]


Вложения:
t_edit.zip [290.66 КБ]
32 скачивания
Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 2:52 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4227
Спасибо! Я продолжу.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 3:09 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4227
Есть бага.

Вырираешь: Файл -> Открыть -> Открывается OpenDialog.
При этом пункт меню "Файл" исчезает http://prntscr.com/7zxaaq

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 3:16 pm 
Не в сети

Зарегистрирован: Чт янв 26, 2006 8:47 pm
Сообщения: 284
Leency писал(а):
Есть бага.

Вырираешь: Файл -> Открыть -> Открывается OpenDialog.
При этом пункт меню "Файл" исчезает http://prntscr.com/7zxaaq


Мой косяк. На скорую руку делал.
Код:
stdcall [kmainmenu_draw], [main_menu]

надо перенести внутрь draw_window: между mcall 12,1 и mcall 12,2

Да и весь код
Код:
   stdcall [kmenu_init], sc
   
   stdcall [ksubmenu_new]
   mov [main_menu], eax
   
   stdcall [ksubmenu_new]
   mov [main_menu_file], eax
   
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_New, 3
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Open, 4
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Save, 5
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
   stdcall [ksubmenu_add], [main_menu_file], eax
   stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Exit, 1
   stdcall [ksubmenu_add], [main_menu_file], eax
   
   stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_File, [main_menu_file]
   stdcall [ksubmenu_add], [main_menu], eax


перенести за комментарий
Код:
;проверка на сколько удачно загузились библиотеки


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс авг 02, 2015 5:16 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1077
Исходники будут?

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 5:43 pm 
Не в сети

Зарегистрирован: Чт янв 26, 2006 8:47 pm
Сообщения: 284
Сорцы + используемый самописный фреймворк


Вложения:
menu_src.zip [71.36 КБ]
69 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вс авг 02, 2015 7:14 pm 
Не в сети

Зарегистрирован: Чт янв 26, 2006 8:47 pm
Сообщения: 284
Исправил утечку памяти при отрисовке


Вложения:
kmenu.obj [23.97 КБ]
38 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Пн авг 03, 2015 8:36 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 443
Вопрос.
Перевожу icon на библиотеку kmenu. Всё отлично, меню появляется. Но одно но. Никак не получается принять инфу о нажатии пункта меню. Не приходит сообщение о нажатии кнопки.
Вот так создал меню:
Спойлер: Показать
Код:
;это в инициализации icon
   mcall   48,3,sc,40
   invoke   kmenu_init,sc
   invoke   ksubmenu_new
   mov   [hMenu],eax
...
   invoke   kmenuitem_new, KMI_NORMAL,RMenuAlign,MII_ALIGN
   invoke   ksubmenu_add,[hMenu],eax

... ; это вызываю при клике правой кнопкой
   invoke   ksubmenu_draw,[hMenu],posRMenu

Приём сообщений 3 разблокирован. Всё как надо, все сообщения приходят. Но не кнопки.
Спойлер: Показать
Код:
   mcall   40,01100100b       ;нужны только события мыши и IPC и кнопок(меню п.к.м.),
                ;перерисовка иконок будет в другом потоке
messages:
   mcall   10
   cmp   eax,3
   je   MSGBtn
   cmp   eax,6
   jz   MSGMouse
   cmp   eax,7
   jz   MSGIPC
   jmp   messages
MSGBtn:
   mcall   17
   call   rb_onBtn
   jmp   messages

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Пн авг 03, 2015 10:26 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4227
Посмотри реализацию в textEdit, может поможет.
rev 5649

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: libkmenu
СообщениеДобавлено: Вт авг 04, 2015 12:39 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн ноя 19, 2012 5:22 pm
Сообщения: 443
Хм. У меня главное окно - рабочий стол: PID 1, слот 1, размеры окна 0,0. Оно точно будет активизироваться, чтобы получить сообщение? Или может ещё что-то.
И ещё. Нашёл баг. Если кликнуть близко к нижней границе экрана, то пункт выделяется не тот, что под мышью(даже если поводить мышью):
Спойлер: Показать
Вложение:
12344.png
12344.png [ 64.34 КБ | 1645 просмотров ]

_________________
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 43 сообщения ]  На страницу 1 2 3 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB