наник и меню – все чудесатее и чудесатее…

Странной (с моей точки зрения) логикой руководствовались разрабы, когда прописывали как наник будет работать с частичными меню. Очень странной.

Если что: всю работу выполняю под Windows, Astra только для проверки. Статья является шпаргалкой и сборной солянкой информации из разных источников (указываю по возможности). И упор идет на классический интерфейс, а не на ленту.

Статьи https://habr.com/ru/companies/nanosoft/articles/668276/ и https://habr.com/ru/companies/nanosoft/articles/668922/ прочитаны, материал оттуда использован в качестве стартового. Описанные там подходы лично мне не годятся от слова совсем - в мои приложения и меню достаточно активно вносятся изменения и дополнения, а обновление крайне желательно делать именно под нанокадом, без привлечения внимания конечного пользователя.

Начну с самого безобидного - создания иконок. Естественно, объединяя их в ресурсную библиотеку. Согласно официальной (и полуофициальной) документации для кнопки надо создавать 2 или 4 рисунка.

image.bmp, 16x16 - для светлой темы
image_large.bmp - для светлой темы, в ленту
image_dark.bmp - для темной темы
image_dark_large.bmp - для темной темы, в ленту

Вопрос номер раз - это глубина цвета (а там, ежли че, может быть и 24 бит, и 32). Вопрос номер два - каким цветом делать фон, чтоб он был прозрачным. В ACAD - 192,192,192. А тут?
Ну и вишенкой - а какая тема считается темной, а какая светлой? Их же далеко не 2 штуки: Windows по умолчанию; Айсберг; Байкальский лед и до фига чего еще (блин, что они курили?!)

Благо есть добрые люди, на https://developer.nanocad.ru/redmine/boards/3/topics/2996?r=3733#message-3733 подсказали, что можно работать с иконками. Названия аналогичны, хотя можно сделать и одну иконку, внутрь которой засунуть все варианты размеров

ico должна быть цветом 32 бит
и трех разрешениях
16х16
24х24
32х32

Правда, можно обойтись только 32х32 - наник вполне корректно масштабирует самостоятельно. Самое главное - не забыть про глубину цвета. Попробовал я тут подсунуть 256 цветов - хренушки, показываться иконка не будет. Ни в Windows, ни в Astra (иконки создаю через GreenFish Icon Editor Pro (бесплатный). В крайнем случае можно попытаться использовать GIMP).

Теперь часть 2. Прописывание этих иконок на команды в cfg-файле (cuix не трогаю, поскольку пока что без надобности). И вот тут начинаются чудеса.

Я как-то привык в ACAD, что ресурсная библиотека а) должна иметь такое же имя, как и имя файла частичного меню и б) лежать рядом с файлом меню. Здесь же полный разброд и шатание. Ресурсная библиотека может располагаться где угодно, иметь любое имя. Правда, надо отдать должное - интерфейс прописан так, что выбрать или назначить несуществующую иконку на команду не получится.

А вот в остальном - привет, приплыли. Если через команду _.interface открыть файл частичного меню (располагается, к примеру, в c:\dev\mymenu.cfg) и попробовать в этот файл внести хоть какие-то изменения, то изменения сохранятся в копии файла, который будет абсолютно молча брошен в %appdata%\Nanosoft\nanoCAD x64 XX.Y\Config - и вся дальнейшая работа будет выполняться именно с этой копией. Что приходится учитывать. При всем при этом в _.interface будет показываться путь к частичному меню правильным - c:\dev\mymenu.cfg. Так и хочется сказать нанодевам: ай-яй-яй, обманывать нехорошо!

Дальше - пока забивал иконки, указывал абсолютный путь к dll. Который у конечного пользователя может быть совсем другим. Открыл cfg, убрал путь к dll, оставив только ее имя.

И вот тут начинается самое забавное - это поиск той самой ресурсной dll. Если она лежит рядом с cfg, по идее же должна она и браться? Правда ведь?

Не совсем. Если dll с таким же именем (но, возможно, с совершенно другим содержимым) попадает в сакральное место %appdata%\Nanosoft\nanoCAD x64 XX.Y\Config - учитываться в первую очередь будет уже она. А дальше поиск останавливается. И что будет показываться в меню - неизвестно никому. При этом dll можно заменить на лету. Правда, никакого эффекта в нанике это не даст - до перезапуска.

И это только по методике ручной настройки интерфейса!

И вот так, слегка матерясь, можно приступить и третьей части. Загрузка меню через .package-файл.

Допустим, .package-файл прописан в автозагрузке NC (как это сделано в примерах из SDK). Меню появляется, все плюс-минус терпимо. Вызов _.interface, и смотрю на список загруженных файлов меню, ожидая увидеть там и прописанный в .package файл. Фигушки! То есть отредактировать такой файл уже не будет настолько просто и быстро. Да даже не столько отредактировать, сколько вообще посмотреть на его содержимое!

Конечно, можно либо открыть этот файл, либо подключить его как частичный - но с какого перепугу такие файлы не показываются в общем списке, я так и не понял. Да и подключение его как частичного - так себе идея, учитывая странное поведение с неконтролируемым копированием файлов cfg, странной логикой поиска ресурсных dll.

Шпаргалочка получилась сумбурной, уж сорри ))) Наверное, я многого не вижу / не понимаю / не осознаю, но общее впечатление о работе наника с пользовательским интерфейсом, так сказать..

Размещено в nanoCAD · Метки: , , ,



Поделитесь своим мнением


Я не робот.