The primary function of a requester is to display information to the user from which the user is to make a selection. Conceptually, requesters are similar to menus since both menus and requesters offer options to the user. Requesters, however, go beyond menus because they can have customized imagery, can be placed anywhere in a window, can be activated by the application and may have any type of gadget attached. For instance, to select a color for a given operation using a menu could be awkward, especially in an application that supports a large number of colors. In that case a requester could be used instead (see figure). figure 7-1: requester deluxe The ability of a true requester to block input to its parent window is important in understanding how requesters are used. When input is blocked by a true requester (also known as a modal requester), the user must take some action before the program will proceed further, such as making a selection, correcting an error condition, or acknowledging a warning. These are situations where a true (modal) requester is appropriate, however, keep in mind that your application should try to be as user-responsive as possible. Putting up a requester merely because you are in a phase of the program where it would be difficult to deal with user input is bad style. Modal requesters should be used only when the program requires user interaction before proceeding. True requesters can be created in a window in two different ways. * An application can display a requester at any time by calling the request() function. * The application can declare a requester as the window's double menu requester, which the user can bring up with a double-click of the menu button (this method is rarely used). creating application requesters requester i/o rendering requesters requester refresh type requester display position gadgets in requesters using a requester to block window input double menu requesters idcmp requester features