Обещанное описание проекта с меню.
Каждое подменю реализовано в отдельном окне.
Захват-2.png
В качестве строк меню использую функциональные кнопки двух типов
- для строк не имеющих подменю следующего уровня. В них находятся функции закрытия всех подменю последующих уровней. В дальнейшем нужно добавить в них полезные функции в соответствии с назначением этих пунктов меню. Кроме того можно вместо функциональных кнопок использовать другие элементы управления, например, битовые кнопки или цифровой ввод.
- для строк имеющих подменю следующего уровня. В них находятся функции закрытия всех подменю последующих уровней и открытия исходящей ветви. Эти кнопки отличаются визуальным оформлением (стрелочка - уголок). Кроме того под такими кнопками находится лампа для подсветки выбранного пути в дереве меню. В такие кнопки тоже можно добавить нужные функции, например для подготовки нужных данных для последующего уровня.
Оформление кнопок зависит от места, которое занимает кнопка в списке. Всего используется 10 типов оформления
Захват-1.png
Все кнопки прозрачные и имеют только контур и надпись.
Кнопки, расположенные на против вызывающих кнопок меню предыдущего уровня, не имеют левой вертикальной линии. Это сделано для визуального выделения соответствия подменю пункту в меню предыдущего уровня. Т.к. ниспадающую структуру дерева каждого меню сделать не получится из-за ограничения вертикального размера экрана. По этому подменю последующих уровней придется размещать выше или ниже строки в текущем уровне.
Каждое подменю вызывается стандартным "Вызовом окна". Вызовы окна размещаются на специальном невидимом окне по заранее известным координатам узловых точек, которые определяются по структуре дерева меню. Таким образом "Вызовы окон" не засоряют поле экранов и такое меню очень удобно редактировать -перемещать, добавлять или удалять требуемые "Вызовы окон" на служебном окне.
Шаг узловых точек по горизонтали кратен ширине окон, а по вертикали -ширине строки меню.
Захват-3.png
Последнее меню в ветви может иметь ширину отличную от шага по горизонтали.
В каждом столбце в одной ключевой точке может находится более одного "Вызова окна" для подменю этого уровня, по этому искать их нужно под другими "Вызовами окна"
В качестве битов управления использую разряды трех регистров PSW, каждый регистр для своего уровня. Получилось меню с тремя уровнями.
Регистры PSW использую потому, что так проще закрывать все открытые подменю, записал в регистр "0" и готово. Хотя можно было использовать биты PSB. Если правильно выбирать адрес для первого PSB в группе, то к такой группе можно обращаться как к одному регистру WORD или DWORD http://www.owen.ru/forum/showthread.php?t=15352
Скрытое окно со структурой меню должно иметь высоту равную 234-высота кнопки вызова меню, ширина этого окна 480. Это окно вызывается в скрытом режиме функцией главной кнопки "Меню". Координаты вызова окна, если кнопка внизу экрана -{0,0}. Если кнопка будет вверху экрана, то координаты вызова окна ={0, высота кнопки}
Главная кнопка вызова меню
Функции в момент нажатия
Захват-7.png
функции в момент отпускания
Захват-8.png
результат выполнения будет зависеть от вспомогательного бита разрешения (кнопка "Пароль") http://www.owen.ru/forum/showthread....l=1#post100969. В результате при первом нажатие кнопки окна со структурой меню открываются, а при повторном нажатии закрываются.




