The OpenInsight EditTable has always supported a set of cell-related common events that are fired when a user interacts with the control:
In order to process these events properly however, it is necessary to know which cell they relate to, and this can ostensibly be found by using the NOTIFYPOS property, which is set to the position of the cell that raised the event.
In theory this approach works well, but in practice it can exhibit problems: Events in OpenInsight are nearly always raised in an asynchronous fashion, which means that if two of those events where executed in quick succession for different cells, then NOTIFYPOS could be set to the position of the second cell, before the Basic+ event handler could process the event for the first cell, thereby leading to incorrect results.
In order to handle this better the EditTable now supports a series of corresponding “CELL” events:
The only difference here is that these events pass the indexes of the cell that raised them as arguments to the event handler, thereby preserving their origin accurately.
E.g. The signature for the old CHANGED event looks like this:
Function Changed( CtrlEntID, CtrlClassID, NewData )
Whilst the signature for the CELLCHANGED event looks like this:
Function CellChanged( CtrlEntID, CtrlClassID, ColNum, RowNum, NewData )
Note that when a “CELL” event is defined the EditTable will non longer raise the ordinary event to prevent the notification from being processed twice.
(One useful example of the benefits of having the “CELL” events is that you can now use the new CELLCHANGED event for cell validation, rather than the usual POSCHANGED event, due to the fact that you know precisely where the change originated from. You also know that there actually was a change, rather than having to compare the cell’s current contents to it’s GOTFOCUSVALUE to discover this).