Creating user friendly programs (6) ----------------------------------- by Steven Flintham (15A) ------------------------ Interacting with the user (3) ----------------------------- The last two articles in this series have covered direct and step selection menus. This time I want to introduce the combined step-and-direct menu, an example of which is provided by the example BASIC program SD1. This is based on the Step2 program from the last article. Step-and-direct menus have the the advantages of both step selection and direct choice menus, the only disadvantage being the small amount of extra code necessary to implement them. The first change is in lines 340-380, where alternative direct choices are printed over at the right hand side of the screen. Their positioning is arbitrary, although I think that this arrangement is probably the neatest. Key shortcuts, as these keys are known, are not provided for all the menu options - this is just done to make the point that it is possible. In a real program, you could provide shortcuts for all of the menu options, or just for the most frequently used ones depending on the situation. For instance, you could miss shortcuts from the "dangerous" menu options (e.g. format disc, delete file) to help to reduce the risk of accidentally selecting them. The "input" loop in lines 440-470 has been extended so that only keys which serve a useful function are accepted. This was not done in the other programs in this series - it is not essential, but it does prevent the menu bar flickering when a non-menu key is pressed. Finally, lines 510-550 simply set choice% to the appropriate line of the menu if a shortcut has been selected. Line 510 converts lower case to upper case if CAPS LOCK is off, which is quite important in a user-friendly program. One possible enhancement would be to convert "!" to "1", "#" to 3,... in case SHIFT LOCK is engaged, but this has not been done in this example since it is not possible to do it in a small amount of code as there is no convienient ASCII relationship between the numbers and their shifted equivalents (or will someone prove me wrong?) This particular version still requires the user to press RETURN after using a shortcut. If you don't want this facility, the code can be modified as in SD2. This simply sets key% to 13 after resetting choice% so that the menu loop terminates immediately. SD3 is a step-and-direct version of the rolling bar menu from last issue. It works in the same way as SD1, and so it should be fairly easy to follow. Note, however, that the bar is redrawn immediately after setting choice% to its new value, rather than after all the key shortcuts have been considered. This is due to the way in which this menu works - it is not possible to remove the bar, set choice% in a series of IF-THEN statements and then restore it because the animation of the bar depends on the key pressed. Secondly, note that PROCdelay(2) has been appended to the IF offset%<>0 THEN... line in order to avoid the scrolling effect when moving the menu bar directly to an option. That's about it as far as menus are concerned. In the next article, I will cover some of the other forms of user input.