When new user defined dialog elements are derived to use the functionality of the XbpWindow class, an existing XBP class that clearly defines the type of dialog element must be used as the superclass. For example, the XbpDialog class or the XbpPushbutton class can be used as the superclass. A class declaration inheriting directly from the XbpWindow class (such as CLASS xyz FROM XbpWindow) is not allowed.
Class XbpWindow() Foundation
Class function of the XbpWindow class.
The XbpWindow class is derived from the XbpPartHandler class and inherits the ability to understand and react to events. Another important characteristic of an XbpWindow object is its capability for interaction. It can react to events that occur within the screen area managed by the object. Within the XbpWindow class, a number of default events are handled and reactions to these events occur when the :handleEvent() method is called. For each default event, a method exists that is executed after the event occurs. As an example, clicking the left mouse button generates the event xbeM_LbClick. When this event occurs, the :LbClick() method is executed. This is done automatically within the method :handleEvent(). The following lines illustrate this:
The event is retrieved using AppEvent() and passed to the method :handleEvent() where the reaction occurs. After the event is received, the corresponding method is executed. For this reason, these methods are referred to as "callback methods".
Callback methods can be redefined by programmers when they create new classes that inherit from Xbase Parts. Alternatively, the reaction to an event can be defined using a code block stored in specific instance variables of the XbpWindow object. These instance variables are called "callback slots". Callback slots are instance variables that have the same name as the corresponding callback methods. When a code block is assigned to one of these instance variables, the code block is executed after the execution of the callback method.
Since the XbpWindow class is an abstract class, no instances of it can be created. Its purpose is to provide functionality to other classes that are derived from it. The functionality provided by this class includes screen management and reactions to events. The latter can be defined using code blocks that are assigned to callback slots or by overloading the callback methods. For each callback slot, a method with the same name exists and can be overloaded (redefined) in subclasses. When a callback method is defined in a subclass, it is executed when the corresponding event occurs.
The xbeM_Wheel event is generated when the user rotates the mouse wheel. This event is always sent to the Xbase Part that has input focus, no matter whether or not the mouse pointer is located within or outside the area of the Xbase Part. All classes derived from XbpWindow that display data which can be vertically scrolled have a default behavior to process this event. This applies to the following classes:
XbpBrowse |
XbpCombobox (XBPCOMBO_DROPDOWNLIST) |
XbpListbox |
XbpMLE |
XbpQuickBrowse |
XbpSpinbutton |
XbpTreeview |
XbpScrollbar *) |
|
The information in the <aWheel> array can be used for computing how far the content of the window needs to be scrolled to reflect the distance and direction in which the user has spun the mouse wheel. The elements in <aWheel> can be used for implementing both line-wise and pixel-wise (or high-resolution) scrolling.
Implementing line-wise scrolling
If the Xbase Part uses line-wise scrolling, for example, because it displays lines of text, a scrolling operation must be performed for as many lines as reported in the nLines element of the <aWheel> array. The xbeM_Wheel events where this element is zero can be ignored.
If the Xbase Part supports pixel-wise scrolling, however, the view must be scrolled by as many pixels as specified in the nOffset element of the <aWheel> array. The xbeM_Wheel events where this element is zero can be ignored. Note that fast rotations of the mouse wheel can cause "jumps" in a scrolled view when applying the scroll offsets in one go. For a smooth scrolling experience, it is instead recommended to scroll using a limited/fixed increment. This is outlined in the following code snippet.
When the first element of <aWheel> is not equal to zero, the $ operator can be used to check which additional keys are pressed while the mouse wheel is rotated. For example:
The instance variables in this group configure system resources. If changes are made to these values, they must either be made before the :create() method is executed or the :configure() method must be used to activate the changes.
The second element (nDistance) indicates the distance the wheel is rotated, expressed in multiples or divisions of 120. The value is positive when the wheel is rotated up and negative when it is rotated down. Each multiple of 120 represents one "notch" on the mouse wheel, and typically corresponds to one line to be scrolled in the window. Note that higher resolution pointing devices and trackpads generate a larger number of xbeM_Wheel events with smaller values in the nDistance array element. These values directly correspond to the rotation distance reported by the hardware (driver), and are intended primarily for implementing custom scrolling behavior.
The third array element (nLines) specifies the number of lines to be scrolled. This is a computed value which takes into account previous mouse wheel operations, causing fractional rotations to be accumulated towards the next full line. The nLines element is non-zero only if one or more lines must be scrolled. For example, a mouse wheel being spun upwards so that approximately 1/3 of a line is reported with each xbeM_Wheel event might have the following sequence of values in the third array element: 0, 0, 1, 0, ... The nLines element is intended for implementing line-wise scrolling which may be required when displaying lines of text, for example.
The fourth array element (nOffset) contains the scroll offset in pixels. This is a computed value which takes into account previous mouse wheel operations, causing fractional rotations to be accumulated towards the next pixel. The scroll offset is based on the height of the default GUI font (XBPSYSFNT_GUIDEFAULT, see XbpFont:create()); one "notch" on the mouse wheel is roughly equivalent to two times the height of this font. The nOffset element is intended for implementing pixel-wise scrolling required when displaying images, for example.
The fifth array element (nLinesToScroll) specifies the system's "lines to scroll" setting, which is a setting configurable in Control Panel. This setting specifies a factor which applications should respect when performing scrolling operations. nLinesToScroll either contains a value greater than zero (number of lines to scroll per virtual line), or -1 if the user has configured page-wise scrolling.
If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.