forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Элементарное меню (http://forum.boolean.name/showthread.php?t=12360)

Algo 12.04.2010 21:22

Элементарное меню
 
Вечер добрый, уважаемые кодеры!

Возникла трабла - никак не могу разобраться с правильным расположением команд и их реацией :( ... Смысл в чем, при запуске проги на экране появляется меню с некоторым набором пунктов, при выборе пункта показывается TextBox или Form-а (или что-то подобное), соответственно, одной из софт-клавиш есть возможность вернуться на шаг назад в родительское меню, но... почему-то в моем случае приложение завершается...
Объясните, пожалуйста, в чем моя ошибка и большая просьба разъяснить правильное использование команд (хронологию относительно основного кода в различных случаях (чтобы одна не перекрывала другую) и т.п.).

PHP код:

program TestMenu;

var
    
m1m2m3integer;
    
chooseback, exit, clickedCommand;

begin
        ShowMenu
('Menu'CH_IMPLICIT);
        
m1 := menuAppendString('Menu point #1');
        
m2 := menuAppendString('Menu point #2');
        
m3 := menuAppendString('Menu point #3');
        
        
choose := createCommand('Choose'CM_OK2);        
        
addCommand(choose);
        
repeat
            delay
(100);
            
clicked := GetClickedCommand;
        
until    
            clicked 
choose;
        
        if 
menuGetSelectedIndex m1 then
            showTextBox
('Test text box''Selected 1-st menu point'2000TF_ANY);
        
        if 
menuGetSelectedIndex m2 then
            showTextBox
('Test text box 2''Selected 2-nd menu point'2000TF_ANY);
        
        if 
menuGetSelectedIndex m3 then
            showTextBox
('Test text box 3''Selected 3-rd menu point'2000TF_ANY);
    
        
back := createCommand('<- Back'CM_BACK1);
        
addCommand(back);    
            
        
repeat
            delay
(100);
            
clicked := GetClickedCommand;
        
until
            clicked 
back;
        
    exit := 
createCommand('Exit'CM_EXIT2);
    
addCommand(exit);
    
repeat
            delay
(100);
            
clicked := GetClickedCommand;
        
until
            clicked 
= exit;
end


Exterior 13.04.2010 19:41

Ответ: Элементарное меню
 
Цитата:

Сообщение от Algo (Сообщение 144556)
при запуске проги на экране появляется меню с некоторым набором пунктов, при выборе пункта показывается TextBox или Form-а (или что-то подобное), соответственно, одной из софт-клавиш есть возможность вернуться на шаг назад в родительское меню, но... почему-то в моем случае приложение завершается...

Поправил ваш код, добавил цикл на гл. меню с запретом непредвиденного завершения + мелкие детали. Все комменты в коде.

PHP код:

program TestMenu;

var
    
m1m2m3integer;
    
chooseback, exit, clickedCommand;

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_OK1);        
            
addCommand(choose); // Выбор
        
exit := createCommand('Exit'CM_EXIT2);
            
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'2000TF_ANY);
        
        if 
menuGetSelectedIndex m2 then
            showTextBox
('Test text box 2''Selected 2-nd menu point'2000TF_ANY);
        
        if 
menuGetSelectedIndex m3 then
            showTextBox
('Test text box 3''Selected 3-rd menu point'2000TF_ANY);    
        
// Прорисовка командной кнопки "Назад"
        
back := createCommand('<- Back'CM_BACK1);
            
addCommand(back);
        
repaint;
        
clicked := GetClickedCommand;        
        
repeat
            delay
(100);
            
clicked := GetClickedCommand;
        
until 
            clicked 
back;
    
until false// * Запрет завершения работы программы
end

можно вынести отрисовку меню, форму завершения программы, да и реакции на функц. клавиши, в общем-то, тоже в отдельные процедуры/функции, удобней кодить, "строить", так сказать, код из блоков, меньше путаницы будет.

Algo 14.04.2010 21:52

Ответ: Элементарное меню
 
Спасибо большое! То что надо!

IvanNes 21.05.2010 16:33

Элементарное меню + подменю
 
Блин, а кто нибудь скажите народ, как сделать меню с подменю!:mda:

odd 21.05.2010 17:10

Ответ: Элементарное меню
 
Да просто. При выборе нужного пункта старое меню удаляешь и добавляешь новые пункты.

IvanNes 27.05.2010 15:00

Ответ: Элементарное меню
 
Цитата:

Сообщение от odd (Сообщение 147415)
Да просто. При выборе нужного пункта старое меню удаляешь и добавляешь новые пункты.

А не проще ли сделать меню в меню? как на этой схеме?

Меню1----Подменю1
Меню2 Подменю2
Меню3

Nik_1712 05.05.2013 21:02

Ответ: Элементарное меню
 
Цитата:

Сообщение от odd (Сообщение 147415)
Да просто. При выборе нужного пункта старое меню удаляешь и добавляешь новые пункты.

И это отлично получается! Новое меню загружается уже с выбранным пунктом, и тут же выполняется! Даже выбирать в этом новом меню ничего не нужно, только заранее подставить в нужный подпункт то, что должно грузится по умолчанию. И зачем это потенциальному пользователю какой-то выбор? А вдруг он что нибудь не то выберет!:super:
А если серьёзно, то как сделать, чтобы старый выбор удалялся из функции menuGetSelectedIndex (или где он там хранится?), прежде чем будет загружено новое меню. Или может быть есть другой способ сделать многоуровневое меню (не графическое)? Или хотя бы организовать перемотку обычного меню (тоже не графического), хотя это и не лучший вариант (такое меню,без подпунктов, может оказаться ну О-о-очень длинным)?:SOS:
Здесь:[ http://forum.boolean.name/showthread.php?t=8674 ] хорошо показана работа Простого (Одноуровневого) меню с возвратом через кнопку, но это не тот случай.


Часовой пояс GMT +4, время: 20:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot