The tables in this section describe user interface events, the user actions that generate the events, and widgets that have default behavior for the events. The term field‑level widgets refers to any widgets that can be part of a field group in a frame: fill‑ins, sliders, selection lists, toggle boxes, radio sets, editors, rectangles, images, text, buttons, combo boxes, and browse widgets. Frames, dialog boxes, windows, menus (including menu bars and pop‑up menus), sub‑menus, and menu items can also receive events. Note that there is frequently a distinction made between a browse widget and a single cell in an updateable browse. For the most part, a browse cell behaves as a fill‑in widget.ABL makes all keyboard actions available as events that you can specify by either key label or key function. You can write triggers for these keyboard events, and associate these triggers with any field‑level widget that receives input focus. For a complete list of key label and key function names, and information on how to use them, see the chapter on handling user input in OpenEdge Development: Programming Interfaces.
Universal key function events — Apply to all user‑interface widgets except menus, submenus, and menu items
Navigation key function events — Apply to those field‑level widgets that can receive focus
Field editing key function events — Apply to fill‑ins and browse cellsTable 114 describes universal key function events.
Table 114: BELL END-ERROR ENDKEY ERROR GO HELP Table 115 describes navigation key function events.
Table 115: BACK-TAB CURSOR-DOWNDOWN CURSOR-LEFTLEFT CURSOR-RIGHTRIGHT CURSOR-UPUP NEXT-FRAME PREV-FRAME TAB Table 116 describes field editing key function events.
Table 116: BACKSPACE CLEAR DELETE-CHARACTER RECALL RETURN ABL provides two keyboard events that you can use to write default triggers. Table 117 describes these events.
Table 117: ANY-KEY ANY-PRINTABLE The following tables reference portable mouse buttons for portable mouse events and physical mouse buttons for three‑button mouse events. For more information on the mapping between portable and physical mouse buttons and how the AVM processes mouse events, see the chapter on handling user input in OpenEdge Development: Programming Interfaces.Table 118 lists the mouse events that apply to all mice, no matter how the buttons are configured.Table 119 lists the mouse events associated with physical mouse buttons.
Table 119: LEFT-MOUSE-DOWN LEFT-MOUSE-UP LEFT-MOUSE-CLICK LEFT-MOUSE-DBLCLICK RIGHT-MOUSE-DOWN RIGHT-MOUSE-UP RIGHT-MOUSE-CLICK RIGHT-MOUSE-DBLCLICK MIDDLE-MOUSE-DOWN MIDDLE-MOUSE-UP MIDDLE-MOUSE-CLICK MIDDLE-MOUSE-DBLCLICK Table 120 lists high‑level widget events. These are events generated by mouse or keyboard actions that perform high‑level operations on a widget, such as entering a fill‑in, choosing a button, or displaying a menu. Unless noted in the AVM Action column, triggers on these events execute before the AVM applies the event. If the trigger returns NO-APPLY, the AVM does not apply the event. If the trigger executes after the event takes place, NO-APPLY has no effect.
Table 120: CHOOSE DEFAULT-ACTION DROP-FILE-NOTIFY 1,2 END END-SEARCH1 ENTRY Note: For a browse widget, ON ENTRY OF browse-name specifies a trigger for the browse widget and ON ENTRY OF column-name IN BROWSE browse-name specifies a trigger for a browse cell. The browse cell is the intersection of the named column and the currently focused row. HOME ITERATION-CHANGED LEAVE Note: For a browse widget, ON LEAVE OF browse-name specifies a trigger for the browse widget and ON LEAVE OF column-name IN BROWSE browse-name specifies a trigger for a browse cell. The browse cell is the intersection of the named column and the currently focused row. MENU-DROP OFF-END 4 OFF-HOME PARENT‑WINDOW‑CLOSE ROW-DISPLAY ROW-ENTRY ROW-LEAVE SCROLL-NOTIFY START-SEARCH1 VALUE-CHANGED WINDOW-CLOSE WINDOW-MAXIMIZED1 WINDOW-MINIMIZED WINDOW-RESIZED WINDOW-RESTORED
The OFF-END event can also occur when there are more rows to retrieve in the query on a ProDataSet temp-table buffer. For more information, see the “ProDataSet events” section.
If a widget has direct manipulation enabled, then direct manipulation events take priority over all other events. In other words, while data manipulation is enabled, the widget cannot perform data entry or application control functions. For example, if you set SELECTABLE to TRUE for a button, ABL interprets a MOUSE-SELECT-UP event as a SELECTION event. If you set SELECTABLE to FALSE, ABL interprets the same event as a CHOOSE event.Table 121 lists the direct manipulation events that apply to field‑level widgets and frames.
Table 121: DESELECTION Internal: Sets the widget’s SELECTED attribute to FALSE. This setting takes effect after any trigger for the event executes.Screen: Removes the highlight from the affected widget or widgets. END-MOVE Internal: Generates an END-MOVE event for each moved widget.Screen: Moves each widget to the new x and y coordinates of its drag box. END-RESIZE Internal: Generates an END-RESIZE event for the resized widget.Screen: Resizes the widget to the new x and y coordinates of its resize box. END-ROW-RESIZE Internal: Generates an END-ROW-RESIZE event for the resized row.Screen: Resizes all rows to the new height. SELECTION Internal: Sets each widget’s SELECTED attribute to TRUE. This setting takes effect after any trigger for the event executes.Screen: Highlights the affected widget or widgets. START-MOVE Internal: Sends a START-MOVE event to all selected widgets. If the trigger returns a NO-APPLY, the AVM does not generate the subsequent END-MOVE event.Screen: Draws a drag box around each of the one or more affected widgets, and moves each drag box in the direction of the moving mouse pointer. START-RESIZE Internal: Sends a START-RESIZE event to the selected widget. If the trigger returns NO-APPLY, the AVM does not generate the subsequent END-RESIZE event.Screen: Stretches a resize box around the widget in the direction of the moving mouse pointer. START-ROW-RESIZE Internal: Sends a START-ROW-RESIZE event to the browse. If the trigger returns NO-APPLY, the AVM does not generate the subsequent END-ROW-RESIZE event.Screen: Stretches a resize box around the row in the direction of the moving mouse pointer.Table 122 lists the direct manipulation events that apply only to frames.
Table 122: EMPTY-SELECTION Internal: Sends a DESELECTION event to all selected widgets in the frame and sends the EMPTY-SELECTION event to the frame.Screen: Removes the highlight around any selected widgets in the frame. END-BOX-SELECTION Internal: If the user pressed the mouse SELECT button, the AVM sends a SELECTION event to all widgets surrounded by the select box. If the user pressed a mouse EXTEND button, the AVM sends a SELECTION event to all unselected widgets, and a DESELECTION event to all selected widgets surrounded by the select box.Screen: Erases the select box, highlights selected widgets, and removes the highlight from deselected widgets. START-BOX-SELECTION Internal: Sends a START-BOX-SELECTION event to the frame. If a trigger returns NO-APPLY, the AVM does not generate the subsequent END-BOX-SELECTION event.Screen: Draws a select box, which initially appears as a dot.AVM Detects — Data is available on a socket or the remote end of a connection has closed its socket; applies only to socket objects.AVM Action — The AVM invokes the READ-RESPONSE event procedure.AVM Detects — A client has connected to a port that the server has enabled connections to; applies only to server socket objects.AVM Action — The AVM invokes the CONNECT event procedure.ABL provides events you can invoke to execute application-specific code that handles FILL operations on a ProDataSet object or Buffer object, as well as row-level change operations. You can use the SET-CALLBACK-PROCEDURE( ) method to associate an action with these events.Table 123 lists the first-level FILL events.
Table 123: AFTER-FILL BEFORE-FILL Table 124 lists the second-level FILL events. These events occur once immediately before or after each record is created in a temp-table during a FILL.
Table 124: AFTER-ROW-FILL BEFORE-ROW-FILL Row-level events are defined for making local changes to the records in a ProDataSet member buffer object. Table 125 lists the row-level events.
Table 125: ROW-CREATE ROW-DELETE ROW-UPDATE The OFF-END event can also occur when the user performs a keyboard or mouse action in a browse that scrolls off the end (past the last row) of a browse on a ProDataSet temp-table buffer. For more information about using the OFF-END event with a browse, see the “High-level widget events” section.
Note: The OFF-END event is similar to the QUERY-OFF-END attribute, which is set to TRUE whenever the associated query object is positioned past the last row. The difference is that you must test the QUERY-OFF-END attribute for this condition at a specific place in your application code, whereas the OFF-END event procedure executes like a trigger whenever the event occurs.
If you use the GET LAST statement or GET-LAST( ) method to get the last record associated with the query, the event handler is called repeatedly until it does not RETURN NO-APPLY (indicating that all records have been retrieved). For this reason, use caution when offering users the GET LAST action.The SYNCHRONIZE event occurs when a ProDataSet temp-table buffer is synchronized. That is, when the SYNCHRONIZE( ) method is run on the buffer or a parent buffer, or the buffer is selected in a browse. The event handler is invoked recursively at every level of the ProDataSet object hierarchy just before the recursion to the child levels.
© 2013 Progress Software Corporation and/or its subsidiaries or affiliates. |