nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
https://www.nvaccess.org/
Other
2.11k stars 637 forks source link

Implement support for TSRichViewEdit (window class mapping) #11063

Open trichview opened 4 years ago

trichview commented 4 years ago

Is your feature request related to a problem? Please describe.

I request to implement support for our ScaleRichView library. This is a Delphi word processing component that is used in many applications, Web site: https://www.trichview.com/features/scalerichview.html Sample application based on ScaleRichView (no installation required): https://www.trichview.com/support/files/temp/ActionTestTabs_MultiRes.zip

Describe the solution you'd like

This component uses several window classes, all of them should be mapped to "Edit". This is already implemented for another our library, TRichViewEdit, and it works. The list of classes that I ask to add is:

TSRichViewEdit, TSRVRichViewEdit, TSRVRichViewHeaderFooterEdit, TSRVRichViewNoteEdit, TDBSRichViewEdit, TInnerDBRichViewEdit, TDBSRVRichViewHeaderFooterEdit, TDBSRVRichViewNoteEdit

I am not sure, are these mapping in source\NVDAObjects\window\__init__.py? If yes, please add to windowClassMap:

"TSRichViewEdit":"Edit",
"TSRVRichViewEdit":"Edit",
"TSRVRichViewHeaderFooterEdit":"Edit",
"TSRVRichViewNoteEdit":"Edit",
"TDBSRichViewEdit":"Edit",
"TInnerDBRichViewEdit":"Edit",
"TDBSRVRichViewHeaderFooterEdit":"Edit",
"TDBSRVRichViewNoteEdit":"Edit"

Describe alternatives you've considered

Additional context

I am the developer of these editors.

danghoaiphuc commented 4 years ago

Hi @trichview , I am just a user of some software that uses your Delphi components but do you think if adding Window class mapping should solve the issues from the root. Before, I have tried to do the same with other screen readers like the code you import into NVDA but some don't work and even with NVDA works not nicely, especially with NVDA's own commands. I think the best solution should be to implement the accessibility features for your SRV controls. In this way, I think most of assistive software including screen readers like NVDA and screen magnifications could get correct info from your SRV controls. When the focus is in your SRV program window with NVDA, you can press Insert+F1 to check how and what NVDA gets the technical info from your controls. Hope it gives some points.

trichview commented 4 years ago

Thank you for information. However, can you give me at least one example of an editor, where NVDA works using IAccessible? I read IAccessible documentation, and as far as I see, a minimal object for accessibility is a block of text, without access to individual characters. So I do not understand how to instruct NVDA to read a single character when the caret moves :( Another editor example would be helpful. As I understand, IAccessible is not used for Notepad, Wordpad and MS Word.

ultrasound1372 commented 4 years ago

It's not used for notepad? I know it wouldn't be for wordpad because that's a rich edit control. I think IAccessible info is exposed on sintilla edits, so notepad++/notepad2 etc, or text areas in standard Windows GUIs or a crossplatform solution that instantiates objects based on the platform, such as JavaFX, WXPython etc. Not sure about Windows forms.

LeonarddeR commented 4 years ago

@trichview Nice that you're reaching out to us. I'm not sure whether your request to map these to edit is valid, as the edit window class seems to be used by plain text edit controls, like notepad. Rather, what version of rich edit have you implemented in your controls?

trichview commented 4 years ago

Our controls do not use any richedits, they are written from scratch. They implement Windows messages (like WM_GETTEXT or EM_LINEINDEX) in a way compatible with standard plain text Edit control. Since NVDA is not interested in text formatting or pictures, it's enough reading text aloud.

danghoaiphuc commented 4 years ago

May I know any further progress on the improvements of SRV's accessibility @trichview ? NVDA does not only read plain text but also can get and read other objects like images, tables, font attributes etc. I have gone through few programs using ScaleTRichview which are very useful but they are not accessible. If you @leonardder and @trichview could have accessibility solution for SRV, that is very helpful and much thankful.

Adriani90 commented 4 years ago

cc: @michaelDCurran

LeonarddeR commented 1 year ago

@trichview I think the modern way to bring this forward is implementing support for the Text and TextRange UIA control patterns in your control. This way, all screen readers including NVDA will support the control automatically and there is no explicit mapping necessary. Alternatively, there is IAccessibleText (IAccessible2).