How to adapt an Object Pascal (Delphi) program, for users which are blind or have difficulty in the vision, in Windows?

1. For the users that have a moderate visual deficit, the font size of the program can be increased. Then it is necessary:

  1. To use a system that resize the windows in function of the text (and its size), usually the habitual systems don't offer a satisfactory result, it is better to make a resizing component by component and to establish the placement among them in the window.
  2. It is not advisable to use the usual messages system, since the font size is small (MessageDlg).

2. The users that have a deep visual deficit or blindness use a program that reads the windows and the messages that appear in the program (named screen readers), these programs they are denominated screen readers. There are commercial screen readers (Jaws) and of open source and freeware (NVDA). Then it is necessary:

  1. To replace all the abbreviations that can lead to reading errors.
  2. To display the messages in a text input (TMemo or TEdit), as it is not advisable to use the habitual messages system (MessageDlg).
  3. Any input must have a label that focus it (FocusControl).
  4. In NVDA there are some added problems:
    1. The labels must be descending from TWinControl (TStaticText).
    2. The menus can not contain images.
    3. chm files isn't read correctly (skip over the links).
    4. It don't read the grids.

What does JMN-Lib offer for these problems?

It is a open source and freeware.

It offers a double solution: for each one of the two groups of users.

In the first place one can choose:

There are many examples and new components created for it (libraries JMN-Bl and TntJMN-Bl).

Then it offers a solution for the users with visual deficit that require or not a screen reader.

There are:

  1. The necessary functions for resize the components and to establish the placement among them in the window, it is also very useful for components that can change with the translation. Look here for more info.
  2. The functions that allow to display the messages in a selected font. It can settle down this way a font (and their size, and for any window of your program) that will be used for the messages. These previous functions, allow to display the messages in a text input for their easy reading with the screen reader, if the user decides this way. Look here for more info.
  3. The libraries to speak according to SAPI 4 and 5. Look here for more info.
  4. The system to emulate a screen reader on running your program. Look here for more info.
  5. Automatic system to set hotkeys (Alt-character) for the dialog inputs, in run time. Look here for more info.
  6. For NVDA:
    1. A TLabel descending from TWinControl has been created (TLabelWC and TTntLabelWC). The label declaration in the dfm file must placed immediately after the component to which references. Look here for more info.
    2. It exist a system that create a TMainMenu (or TTntMainMenu) without images from the Menus that contain them, as well as the functions to use both menus simultaneously.
    3. You must add in the htm directory (within the program directory) the htm files that the default htm viewer (Firefox, Internet Explorer) opens according to the sent program command.
    4. It isn't solution to grid reading.