Skip to content

Speak selection changes in Delphi grids #7418

@LeonarddeR

Description

@LeonarddeR

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).

  1. 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.
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions