реклама на сайте
подробности

 
 
> Экранное меню дисплея, Методы реализации
uragan90
сообщение May 29 2011, 07:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Здравствуйте!!! Пытаюсь делать меню для дисплея состоящего из нескольких экранных кнопок в которых изменяются две строчки текста (Параметр и строчка значения). Так же, эти кнопки по плану, должны менять активность (цвет канта- красный, зеленый, чёрный). Все это дело рулиться пятью кнопками. Собственно в чем заминка: Когда стал писать текст самого меню у меня получается огромный и бесконечный лист кода wacko.gif Я еще новичок!!! Я вывожу текст всех этих строк в кнопках строчкой кода типа для каждой строчки- каждый раз:
Код
void lcd_putchar(unsigned int x, unsigned int y, unsigned char c, unsigned short t_color, unsigned short b_color, unsigned char rot, unsigned char zoom )

Но возможных параметров в кнопках всего 10, а значений 45 возможных. Может это дело как то в массив запихать и потом написать функцию кнопки вида:
Код
Key(unsigned int x, unsigned int y, unsigned char status, unsigned znachenie, unsigned int parametr)

Помогите новичку въехать в принцип построения менюх, пожалуйста rolleyes.gif

Работать должно так:
Пяти кнопочным джойстиком (вправо,влево) выбираю кнопку, нажимаю ОК - кнопка должна поменять статус(цвет канта- красный), еще раз нажимаем ОК (опять меняется цвет канта кнопки на зеленый) и становится возможным изменять строчку параметра (10 вариантов). Нажимаем кнопку верх-низ выбираем уже значения и кнопками в лево-право пролистаем значения (в разных кнопках их поразному где 7, где 12 значений). Как бы это записать то или понять. Мой текст кода огромен... Забыл добавить мк at91sam7s256, экран от китайской нокиа n95

Может вот так надо??
Создать массивы
Код
unsigned char X1[]={"Stroka 1"};
unsigned char X2[]={"Stroka 2"};
unsigned char X3[]={"Stroka 3"};
unsigned char X4[]={"Stroka 4"};
unsigned char X5[]={"Stroka 5"};
...

unsigned char Y1[]={"Stroka 1"};
unsigned char Y2[]={"Stroka 2"};
unsigned char Y3[]={"Stroka 3"};
unsigned char Y4[]={"Stroka 4"};
unsigned char Y5[]={"Stroka 5"};
...

И в функции меню выбирать элементы этих массивов???

Сообщение отредактировал uragan90 - May 29 2011, 12:07
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexandrY
сообщение May 29 2011, 15:47
Сообщение #2


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(uragan90 @ May 29 2011, 10:31) *
Помогите новичку въехать в принцип построения менюх, пожалуйста rolleyes.gif


Меню делается из базовых структур: дерева и стека.

Деревом описывается само меню и все его уровни с аттрибутами.
Стек используется для запоминания текущей траектории по ветвям в дереве меню.

Дерево здесь по сути однонаправленный список в каждом узле корого хранится массив указателей на узлы ветвей и собственные аттрибуты.
Дерево формируется во время парсинга конфигурационного файла с описанием меню.
И дерево и стек формируются динамически в памяти с использованием указателей. Поэтому нужен еще хороший движок кучи (heap-а).
Go to the top of the page
 
+Quote Post
Nixon
сообщение May 29 2011, 18:49
Сообщение #3


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Цитата(AlexandrY @ May 29 2011, 18:47) *
И дерево и стек формируются динамически в памяти с использованием указателей. Поэтому нужен еще хороший движок кучи (heap-а).
В большинстве случаев это необязательно - дерево меню может быть создано статически, а от стека переходов можно вообще отказаться (если соответственно создать дерево)


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 29 2011, 19:35
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Nixon @ May 29 2011, 21:49) *
В большинстве случаев это необязательно - дерево меню может быть создано статически, а от стека переходов можно вообще отказаться (если соответственно создать дерево)


Я специально не конкретизировал схему дерева и стека, поскольку в моем варианте можно взять любой учебник по C и скопировать оттуда процедуры работы с деревьями и стеками. Они будут выполнены с использованием динамического выделения памяти.
А статические деревья на С-и писать еще муторней чем нудно писать одинаковые строки текстов.

Меню легче всего оформлять как ресурс в виде сериализованых данных например в одном из форматов XML, YAML, JSON... чтобы его было проще генерировать и верифицировать на правильность синтаксиса.
Ну а сорсов парсеров XML навалом, и строят они в результате те самые динамические деревья.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016