|
Основной форум Сюда все проблемы связанные с программированием. |
12.04.2010, 21:22
|
#1
|
AnyKey`щик
Регистрация: 12.04.2010
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Элементарное меню
Вечер добрый, уважаемые кодеры!
Возникла трабла - никак не могу разобраться с правильным расположением команд и их реацией ... Смысл в чем, при запуске проги на экране появляется меню с некоторым набором пунктов, при выборе пункта показывается TextBox или Form-а (или что-то подобное), соответственно, одной из софт-клавиш есть возможность вернуться на шаг назад в родительское меню, но... почему-то в моем случае приложение завершается...
Объясните, пожалуйста, в чем моя ошибка и большая просьба разъяснить правильное использование команд (хронологию относительно основного кода в различных случаях (чтобы одна не перекрывала другую) и т.п.).
program TestMenu; var m1, m2, m3: integer; choose, back, exit, clicked: Command; begin ShowMenu('Menu', CH_IMPLICIT); m1 := menuAppendString('Menu point #1'); m2 := menuAppendString('Menu point #2'); m3 := menuAppendString('Menu point #3'); choose := createCommand('Choose', CM_OK, 2); addCommand(choose); repeat delay(100); clicked := GetClickedCommand; until clicked = choose; if menuGetSelectedIndex = m1 then showTextBox('Test text box', 'Selected 1-st menu point', 2000, TF_ANY); if menuGetSelectedIndex = m2 then showTextBox('Test text box 2', 'Selected 2-nd menu point', 2000, TF_ANY); if menuGetSelectedIndex = m3 then showTextBox('Test text box 3', 'Selected 3-rd menu point', 2000, TF_ANY); back := createCommand('<- Back', CM_BACK, 1); addCommand(back); repeat delay(100); clicked := GetClickedCommand; until clicked = back; exit := createCommand('Exit', CM_EXIT, 2); addCommand(exit); repeat delay(100); clicked := GetClickedCommand; until clicked = exit; end.
|
(Offline)
|
|
13.04.2010, 19:41
|
#2
|
AnyKey`щик
Регистрация: 13.04.2010
Адрес: Поселок виртуального типа «Гуглы»
Сообщений: 1
Написано одно полезное сообщение (для 2 участников)
|
Ответ: Элементарное меню
Сообщение от Algo
при запуске проги на экране появляется меню с некоторым набором пунктов, при выборе пункта показывается TextBox или Form-а (или что-то подобное), соответственно, одной из софт-клавиш есть возможность вернуться на шаг назад в родительское меню, но... почему-то в моем случае приложение завершается...
|
Поправил ваш код, добавил цикл на гл. меню с запретом непредвиденного завершения + мелкие детали. Все комменты в коде.
program TestMenu; var m1, m2, m3: integer; choose, back, exit, clicked: Command; begin { * Основной цикл для постоянного отображения главного меню, собственно, это и есть ключевой момент, предостеригающий от непредвиденного завершения работы программы } repeat ShowMenu('Menu', CH_IMPLICIT); m1 := menuAppendString('Menu point #1'); m2 := menuAppendString('Menu point #2'); m3 := menuAppendString('Menu point #3'); // Отрисовка функц. кнопок главного меню choose := createCommand('Choose', CM_OK, 1); addCommand(choose); // Выбор exit := createCommand('Exit', CM_EXIT, 2); addCommand(exit); // Выход repaint; repeat delay(100); clicked := GetClickedCommand; // Если нажали "Выход", завершаем работу программы if clicked = exit then halt; until clicked = choose; if menuGetSelectedIndex = m1 then showTextBox('Test text box', 'Selected 1-st menu point', 2000, TF_ANY); if menuGetSelectedIndex = m2 then showTextBox('Test text box 2', 'Selected 2-nd menu point', 2000, TF_ANY); if menuGetSelectedIndex = m3 then showTextBox('Test text box 3', 'Selected 3-rd menu point', 2000, TF_ANY); // Прорисовка командной кнопки "Назад" back := createCommand('<- Back', CM_BACK, 1); addCommand(back); repaint; clicked := GetClickedCommand; repeat delay(100); clicked := GetClickedCommand; until clicked = back; until false; // * Запрет завершения работы программы end.
можно вынести отрисовку меню, форму завершения программы, да и реакции на функц. клавиши, в общем-то, тоже в отдельные процедуры/функции, удобней кодить, "строить", так сказать, код из блоков, меньше путаницы будет.
__________________
Без труда, не напишешь и "Hello World!"
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо Exterior за это полезное сообщение:
|
|
14.04.2010, 21:52
|
#3
|
AnyKey`щик
Регистрация: 12.04.2010
Сообщений: 2
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Элементарное меню
Спасибо большое! То что надо!
|
(Offline)
|
|
21.05.2010, 16:33
|
#4
|
Нуждающийся
Регистрация: 16.05.2010
Сообщений: 50
Написано 2 полезных сообщений (для 2 пользователей)
|
Элементарное меню + подменю
Блин, а кто нибудь скажите народ, как сделать меню с подменю!
|
(Offline)
|
|
21.05.2010, 17:10
|
#5
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Элементарное меню
Да просто. При выборе нужного пункта старое меню удаляешь и добавляешь новые пункты.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
27.05.2010, 15:00
|
#6
|
Нуждающийся
Регистрация: 16.05.2010
Сообщений: 50
Написано 2 полезных сообщений (для 2 пользователей)
|
Ответ: Элементарное меню
Сообщение от odd
Да просто. При выборе нужного пункта старое меню удаляешь и добавляешь новые пункты.
|
А не проще ли сделать меню в меню? как на этой схеме?
Меню1----Подменю1
Меню2 Подменю2
Меню3
|
(Offline)
|
|
05.05.2013, 21:02
|
#7
|
AnyKey`щик
Регистрация: 05.05.2013
Сообщений: 1
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Элементарное меню
Сообщение от odd
Да просто. При выборе нужного пункта старое меню удаляешь и добавляешь новые пункты.
|
И это отлично получается! Новое меню загружается уже с выбранным пунктом, и тут же выполняется! Даже выбирать в этом новом меню ничего не нужно, только заранее подставить в нужный подпункт то, что должно грузится по умолчанию. И зачем это потенциальному пользователю какой-то выбор? А вдруг он что нибудь не то выберет!
А если серьёзно, то как сделать, чтобы старый выбор удалялся из функции menuGetSelectedIndex (или где он там хранится?), прежде чем будет загружено новое меню. Или может быть есть другой способ сделать многоуровневое меню (не графическое)? Или хотя бы организовать перемотку обычного меню (тоже не графического), хотя это и не лучший вариант (такое меню,без подпунктов, может оказаться ну О-о-очень длинным)?
Здесь:[ http://forum.boolean.name/showthread.php?t=8674 ] хорошо показана работа Простого (Одноуровневого) меню с возвратом через кнопку, но это не тот случай.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:15.
|