libkmenu

Discussing libraries simplifying applications development
  • Кто может добавить меню в TextEdit?
    Из хаоса в космос
  • В принципе, я могу, но библиотеки довольно сложно подключаются, пока целостной картины не имею.
  • Небольшое косметическое изменение - добавлены стрелки для выпадающих подменю.
    Исправлено пару багов
    menu2.png
    menu2.png (2.58 KiB)
    Viewed 11432 times
    Attachments
    libkmenu.zip (11.18 KiB)
    Downloaded 398 times
  • Я ждал этого :)

    Костя, может ты добавишь строку меню в TextEdit?
    По крайней мере базовый вариант, дальше я или Pathoswithin.
    Из хаоса в космос
  • Вот первичный задел
    Правились t_edit, t_data, t_draw (draw_but_toolbar)
    Для выхода из программы по пункту меню, в текущей реализации меню нельзя использовать id=1 (используетсяв внутренних целях для закрытия родительских выпадающих меню), придется назначать новый.
    textedit.png
    textedit.png (6.51 KiB)
    Viewed 11414 times
    Attachments
    t_edit.zip (290.66 KiB)
    Downloaded 351 times
  • Спасибо! Я продолжу.
    Из хаоса в космос
  • Есть бага.

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

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

    Code: Select all

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

    Да и весь код

    Code: Select all

    	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
    перенести за комментарий

    Code: Select all

    ;проверка на сколько удачно загузились библиотеки
  • Исходники будут?
    to infinity and beyond
  • Сорцы + используемый самописный фреймворк
    Attachments
    menu_src.zip (71.36 KiB)
    Downloaded 488 times
  • Исправил утечку памяти при отрисовке
    Attachments
    kmenu.obj (23.97 KiB)
    Downloaded 345 times
  • Вопрос.
    Перевожу icon на библиотеку kmenu. Всё отлично, меню появляется. Но одно но. Никак не получается принять инфу о нажатии пункта меню. Не приходит сообщение о нажатии кнопки.
    Вот так создал меню:
    Spoiler:

    Code: Select all

    ;это в инициализации 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 разблокирован. Всё как надо, все сообщения приходят. Но не кнопки.
    Spoiler:

    Code: Select all

    	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
    
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Посмотри реализацию в textEdit, может поможет.
    rev 5649
    Из хаоса в космос
  • Хм. У меня главное окно - рабочий стол: PID 1, слот 1, размеры окна 0,0. Оно точно будет активизироваться, чтобы получить сообщение? Или может ещё что-то.
    И ещё. Нашёл баг. Если кликнуть близко к нижней границе экрана, то пункт выделяется не тот, что под мышью(даже если поводить мышью):
    Spoiler:
    12344.png
    12344.png (64.34 KiB)
    Viewed 11255 times
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Who is online

    Users browsing this forum: Semrush [Bot] and 1 guest