Event XbpQuickBrowse():customDrawCell Foundation
A cell within an owner-drawn XbpQuickBrowse object needs to be redrawn.
:customDrawCell := {| oPS, aInfo, self | ... }
:customDrawCell( oPS, aInfo ) --> self | lDefaultDraw
xbeP_CustomDrawCell (1048649)
This method returns the object executing the method (self). The XbpQuickBrowse class also supports a logical value to be returned from method :customDrawCell(), or from a code block assigned to member :customDrawCell. Returning self or the value .T. (true) causes the object to perform default rendering. This depends on the drawing mode as well as on the current state of the XbpQuickBrowse object. See below for further information.
The xbeP_CustomDrawCellevent is generated whenever cells of an owner-drawn XbpQuickBrowse must be redrawn. During processing of this event, the method:customDrawCell() is executed automatically to issue a redraw of the cells by the Xbase++ application. If a code block is assigned to the :customDrawCell instance variable, that code block is also evaluated. Processing of the xbeP_CustomDrawCell event can be done within the :customDrawCell() method, or within the code block in :customDrawCell. The method is executed first, then the code block is evaluated. The owner-drawing feature is controlled via the :drawModeinstance variable of an XbpQuickBrowse object.
Prior to drawing a cell of the browse, an Xbase++ application is expected to examine the information passed in parameter <aInfo>. The elements in the array specify the cell's current state and dimensions, as well as the operation which caused the redraw. The columns of the <aInfo> array can be identified using symbolic constants defined in the file "xbp.ch".
Element | Constant | Description |
---|---|---|
aRowCol | XBP_DRAWINFO_ITEM | Array with number of row and column that contains the cell |
nAction | XBP_DRAWINFO_ACTION | Action or operation which caused xbeP_CustomDrawCell event |
nState | XBP_DRAWINFO_STATE | Current state of the cell |
aRect | XBP_DRAWINFO_RECT | Bounding rectangle for the drawing operation, a 4-element array of the form { nX1, nY1, nX2, nY2 } with the lower left and upper right corner points of the rectangle |
oArea | XBP_DRAWINFO_AREA | Area that contains the cell (header, data area) |
Element nAction is a numerical value and can be a combination of the following values:
Constant | Description |
---|---|
XBP_DRAWACTION_SELCHANGE | The highlight state of a cell is changed. |
XBP_DRAWACTION_DRAWBG *) | The system is about to draw the background of a cell. By default, the style image corresponding to the current cell state is drawn if a visual style is used. Otherwise, the system uses the cell background or hilight color to draw the background. The value .F. (false) must be returned by the application to prevent the system from performing these actions. |
XBP_DRAWACTION_DRAWFRAME *) | The system is about to draw a cell frame or highlight mark. The default processing of this action draws the frame type according to the browser style selected in the instance variable :style. The default processing of this action uses the following scheme to draw the cell frames: |
If a column frame is defined by the style selected in member :style, the frame is drawn around each column in the browser. The row number in member aRowCol of the aInfo array has no meaning in this case and is always 0 (aRowCol = {0,<nCol>}). | |
If a cell frame is defined by the style selected in member :style, the frame is drawn around each row in the browser. The column number in member aRowCol of the aInfo array has no meaning in this case and is always 0 (aRowCol = {<nRow>,0}. | |
For highlighted cells, the highlight frame defined by the style is drawn around each cell in the browser. Member aRowCol of the aInfo array specifies the row and column number of the cell to be framed (aRowCol = {<nRow>,<nCol>}). | |
Action XBP_DRAWACTION_DRAWFRAME is not requested for frame elements which are not used by the style selected. For example, selecting the style XBP_STYLE_SYSTEMDEFAULT in member :style causes cells to not use a cell frame in the data area of the browser. Consequently, the action | |
XBP_DRAWACTION_DRAWFRAME is not requested when these cells must be redrawn. The value .F. must be returned to prevent the system from performing default processing for this action. | |
XBP_DRAWACTION_DRAWFG | The system is about to draw the caption or image within the cell. The application must return .F. if a custom caption is drawn, eg. using the Graphics Engine. |
|
Note that the table above is in execution order. The drawing actions listed are requested by the system ordered from top to bottom.
Element nState is a numerical value and can be a combination of the following values:
Constant | Description |
---|---|
XBP_DRAWSTATE_NORMAL | Object is in default state |
XBP_DRAWSTATE_SELECTED | Cell is currently selected |
XBP_DRAWSTATE_DISABLED | Object is currently disabled |
XBP_DRAWSTATE_FOCUS | Object currently has input focus |
The callback method in the XbpQuickBrowse class does not execute any code. Instead, the method is provided for overloading in user-defined subclasses. If owner-drawing is to be used with the XbpQuickBrowse class itself (not a derived class), a code block must be assigned to the :customDrawCellcallback slot.
The xbeP_CustomDrawCell event is sent synchronously by the :handleEvent() method of an XbpQuickBrowse object. This implies that xbeP_CustomDrawCell events will not be retrieved by the AppEvent()function. The event is generated while the operating system redraws an application's user interface. Therefore, it is not advisable to perform lengthy operations during processing of xbeP_CustomDrawCell. Otherwise, responsiveness of the application's user interface may be slow.
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.