Delphi applications tend to use grid controls which don't expose information to MSAA. The only way to reach the grid contents is by means of the display model. When navigating through the particular grids using arrow keys, NVDA doesn't speak any information.
There are two ways this can be fixed, and even though this most of the time happens in Delphi applications, I'd go for generalized approaches (e.g. in NVDAObjects.behaviors).
- Handle the displayModel_drawFocusRectNotify event on the object. When triggered, create a DisplayModelTextInfo limited to the provided rectangle and speak the text info. Note that this should really only be done on a mix-in class, for some objects, displayModel_drawFocusRectNotify will interfere with IAccessible focus events, for example.
- Delphi grids change the foreground and background color for the selected grid cell. Move some base functionality of behaviors.LiveText into a new base class behaviors.TextMonitor. Create a new TextSelectionMonitor based on TextMonitor and for every textChange event, speak the text range that is associated with the selectionOffsets.
Although the latter approach might be more far-fetched, it will be of great assistance in applications where no focus events are fired even though parts of the screen are focused that are only accessible by means of the display model. So where the first approach only covers cases for which the displayModel_drawFocusRectNotify event is triggered, the latter will also cover cases where this event isn't triggered even thoug there is a visible selection.
Delphi applications tend to use grid controls which don't expose information to MSAA. The only way to reach the grid contents is by means of the display model. When navigating through the particular grids using arrow keys, NVDA doesn't speak any information.
There are two ways this can be fixed, and even though this most of the time happens in Delphi applications, I'd go for generalized approaches (e.g. in NVDAObjects.behaviors).
Although the latter approach might be more far-fetched, it will be of great assistance in applications where no focus events are fired even though parts of the screen are focused that are only accessible by means of the display model. So where the first approach only covers cases for which the displayModel_drawFocusRectNotify event is triggered, the latter will also cover cases where this event isn't triggered even thoug there is a visible selection.