Показать сообщение отдельно
Старый 13.04.2010, 19:41   #2
Exterior
AnyKey`щик
 
Аватар для Exterior
 
Регистрация: 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 за это полезное сообщение:
Algo (14.04.2010), Rock2roll (22.05.2010)