Автор Тема: Искусство лазанья по деревьям....  (Прочитано 12424 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Что-то как-то... Условий менше не стало, Неочевидно стало добавлять новые условия (я добавил еще одну кнопку для возврата в предыдущее меню). Короче, я вывел
   Read Dummy
   Read Dummy
и
   sts {MenuPointer}, R8
   sts {MenuPointer + 1}, R9
в отдельные функции и успокоился. Итак все очень неплохо.
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

pumpkin

  • Профи
  • ****
  • Сообщений: 240
  • Карма: 2
  • Пол: Мужской
  • Это Я :-)
    • Просмотр профиля
Цитировать
Неочевидно стало добавлять новые условия (я добавил еще одну кнопку для возврата в предыдущее меню).
Добавил к каждому пункту меню в секции data еще одну связь на родительский элемент или просто адреса родителей запоминаешь по ходу работы? Интересно просто.

Основная мысль предыдущего моего сообщения была в том, чтобы в зависимости от нажатой кнопки, при помощи Read Dummy переместиться на нужную связь. Если сосед слева - 2 байта, сосед справа - 4 байта, родитель (если возврат в предыдущее добавить) - 6 байт. А потом уже один раз выполнить (он для всех кнопок ведь одинаков) блок
   Read Dataptr
   sts {MenuPointer}, R8
   sts {MenuPointer + 1}, R9
   Goto Display_new_menu

Но можно и по-твоему. Вариантов реализации много. :)

Andy

  • Администратор Форумa
  • Эксперт
  • *
  • Сообщений: 1803
  • Карма: 15
  • Пол: Мужской
  • Нельзя отремонтировать то, что не сломано...
    • minilabmaster
    • Просмотр профиля
    • Форум "Минилаб-Мастер"
Ну я просто добавил еще один одинаковый блок как на те две кнопки, и прицепил третью кнопку. А в описание меню добавил еще одно поле.  Потом вывел одинаковые блоки в подпрограммы - получилось компактно и красиво. Вот и все.
« Последнее редактирование: 19 Июль 2010, 07:08:25 от admin »
Заклинило деталь - надави на нее, если она сломалась - ничего, ее все равно надо было менять.

pumpkin

  • Профи
  • ****
  • Сообщений: 240
  • Карма: 2
  • Пол: Мужской
  • Это Я :-)
    • Просмотр профиля
Цитировать
Ну я просто добавил еще один одинаковый блок как на те две кнопки, и прицепил третью кнопку. А в описание меню добавил еще одно поле.
Точно. Тоже думаю, что это оптимальное решение. Меню в секции $data такого вида:
   Метка_своя:
   Data Тип_Меню
   Data "Название_меню"
   Adr2 Метка_дочернего /или/ Adr Метка_подпрограммы
   Adr2 Метка_соседа_слева
   Adr2 Метка_соседа_справа
   Adr2 Метка_родителя

Вот еще вариант обработки клавиш, который мене в голову пришел:
Цитировать
\' Если тип меню - команда и был нажат "Enter" (2), то:
 If B = 50 Then
   If Type = Id_command Then
     Read Dataptr
     movw R30,R8
     icall
     Goto Display_new_menu
   End If
 End If

 Offset = 0    \' Нажат "Enter" (2) но не команда, а подменю
 If B = 49 Then Offset = 2     \' Нажата  "<-" (1) - смещение 2 байта
 If B = 51 Then Offset = 4     \' Нажата "->" (3) - смещение 4 байта
 If B = 52 Then Offset = 6     \' Нажата "Esc" (4) - смещение 6 байт
 While Offset > 0
   Read Dummy                          \' смещаемся к нужному меню
   Offset = Offset - 1
 Wend

 Read Dataptr
 sts {MenuPointer}, R8
 sts {MenuPointer + 1}, R9
 Goto Display_new_menu

Форум проекта "Минилаб-Мастер"