Должно быть что-то вроде этого:

program NewProject;
Procedure SubMenu1;
var cmdOK, cmdBack, click: command;
mnuSubMenu1, mnuSubMenu2: integer;
begin
repeat
showMenu('Под меню 1',CH_IMPLICIT);
mnuSubMenu1:=MenuAppendString('Под-под меню 1');
mnuSubMenu2:=MenuAppendString('Под-под меню 2');
cmdOK:=CreateCommand('Выбор',CM_OK,1); AddCommand(cmdOK);
cmdBack:=CreateCommand('Назад',CM_Back,1); AddCommand(cmdBack);
repaint;
repeat
click:=GetClickedCommand;
until click<>EmptyCommand;
RemoveCommand(cmdOK); RemoveCommand(cmdBack);
if click=cmdOK then begin
// if MenuGetSelectedIndex=mnuSubMenu1 then .......
// if MenuGetSelectedIndex=mnuMenu2 then .........
end;
until click=cmdBack;
end;
Procedure Menu1;
var cmdOK, cmdBack, click: command;
mnuSubMenu1, mnuSubMenu2: integer;
begin
repeat
showMenu('Меню 1',CH_IMPLICIT);
mnuSubMenu1:=MenuAppendString('Под меню 1');
mnuSubMenu2:=MenuAppendString('Под меню 2');
cmdOK:=CreateCommand('Выбор',CM_OK,1); AddCommand(cmdOK);
cmdBack:=CreateCommand('Назад',CM_Back,1); AddCommand(cmdBack);
repaint;
repeat
click:=GetClickedCommand;
until click<>EmptyCommand;
RemoveCommand(cmdOK); RemoveCommand(cmdBack);
if click=cmdOK then begin
if MenuGetSelectedIndex=mnuSubMenu1 then SubMenu1;
// if MenuGetSelectedIndex=mnuSubMenu2 then SubMenu2;
end;
until click=cmdBack;
end;
Procedure MainMenu;
var cmdOK: command;
mnuMenu1, mnuMenu2, mnuExit: integer;
begin
repeat
showMenu('Главное меню',CH_IMPLICIT);
mnuMenu1:=MenuAppendString('Меню 1');
mnuMenu2:=MenuAppendString('Меню 2');
mnuExit :=MenuAppendString('Выход');
cmdOK:=CreateCommand('Выбор',CM_OK,1); AddCommand(cmdOK);
repaint;
repeat
until GetClickedCommand<>EmptyCommand;
RemoveCommand(cmdOK);
if MenuGetSelectedIndex=mnuMenu1 then Menu1;
// if MenuGetSelectedIndex=mnuMenu2 then Menu2;
// и т.д...
until MenuGetSelectedIndex=mnuExit;
end;
begin
MainMenu;
end.