Each visual object type supports a set of user interface events. You can see a list of all these events in the AppBuilder if you go into the triggers section of the Section Editor for an object and then click the New button. Each object type first supports a list of Common Events, such as the events for a button, as shown in the next figure.

Figure 1. Common button events

They are called common events simply because they are the events most commonly associated with an object. Each object has its own set of these events but there is a lot of overlap. For example, any object that can be part of the tab order of a frame has the ENTRY event, which fires when the user tabs into the object, and the LEAVE event, which fires when the user tabs out of that object. Any object that can be the target of keystrokes (even an object like a button that does not use those keystrokes to set a data value) can use the ANY-KEY or ANY-PRINTABLE events to respond to them.

In some cases, the most common event is one that is distinctive for that object. For example, the whole purpose of a button is for someone to click it and to have an action result. Therefore, the button supports the CHOOSE event, which is supported only by buttons and menu items. This is the default event that comes up in the Section Editor when you go into the triggers section for it. Data-representation objects, which can have actual values, support the VALUE-CHANGED event, which fires when the user enters a new value for the object.

To see a complete description of all the common events, see the "High-level widget events topic" in the ABL Reference.

Objects support Direct Manipulation Events, such as CHOOSE (shown in the next figure), which fire when the user performs an action (typically using the mouse) that involves selecting an object and possibly moving or resizing it. Some of these events are the result of making the object SELECTABLE, RESIZABLE, or MOVABLE.

Figure 2. Direct manipulation events

There is a whole host of events associated with all of the possible ways the user can make a selection with either a standard two-button mouse or a three-button mouse, such as the portable mouse events (shown in the next figure), that can map to either type of mouse.

Figure 3. Portable mouse events

ABL also supports a set of ten miscellaneous events that have no standard meaning or action, but which are intended to let you associate a trigger with some event that only happens programmatically using the APPLY statement, and which has nothing to do with a particular user action. These are called the developer events and are numbered U1 through U10, as shown.

Figure 4. Developer events

These developer events have no built-in significance, but allow you to define a block of code to execute. For example, you can specify ON U1 OF an object and then programmatically APPLY "U1" to the object to execute the code.

Finally, you can associate a trigger with virtually any keyboard keystroke combination, by clicking the Keyboard Event button and then typing the keystroke combination, such as CTRL+X as shown.

Figure 5. Keyboard event dialog box