FireMonkey アクセシビリティ(ユーザー補助)パッケージ
FireMonkey への移動
Delphi Sydney の Win32/Win64 および macOS アプリケーション向けに、FireMonkey デスクトップでアクセシビリティがサポートされます。 FireMonkey アクセサビリティ パッケージは、the Registered Users site:
http://cc.embarcadero.com/item/29850
からダウンロードできます。
FireMonkey アクセシビリティ パッケージでは以下をサポートしています。
- JAWS スクリーン リーダー(Freedom Scientific 社製、Windows 版)
- VoiceOver スクリーン リーダー(Apple 社製、macOS 版)
目次
使用技術
FireMonkey アクセシビリティ サポートは、Windows では Microsoft の MSAA インターフェイス(Microsoft Active Accessibility アーキテクチャ)に基づいており、macOS の場合は macOS アクセシビリティ プロトコルに基づいています。
これらの API については以下を参照してください。
- MSAA:
- macOS アクセシビリティ:
Windows MSAA に基づく実装は Freedom Scientific 社の JAWS と Microsoft の Windows ナレーターでテスト済みです。 macOS では、Apple VoiceOver アプリケーションでテスト済みです。
アーキテクチャ
オペレーティング システムのアクセシビリティ インターフェイスを実装するため、FireMonkey のデフォルトの TForm から派生した新しいフォーム クラスが用意されています。このフォーム クラス TAccForm には、Windows プラットフォームをターゲットとする独立した実装があります。これは、Windows MSAA インターフェイスを実装し、MSAA とフォーム上の FireMonkey コントロールとのやり取りをすべて処理します。また、これに対応する macOS 向けの実装もあります。
この TAccForm クラスは、もっとも共通、標準的な FireMonkey コントロールに対する、組み込み処理を保有しています。これはつまり、FireMonkey アプリケーションにおいて、アクセサビリティを有効にするには、TForm の代わりに TAccForm からフォームを派生させること以外、余分な手順はいらない、ということになります。
ファースト ステップ
マルチデバイス フォームでアクセサビリティを有効にするには、まずは、これを実装している必要なユニットを追加します。アクセサビリティは 3 つのユニットによって実現されています:
- FMX.ScreenReader
- FMX.ScreenReader.Mac
- FMX.ScreenReader.Win
uses リストは次のような形になります:
uses
System.SysUtils, System.Types, System.UITypes, System.Rtti,
System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms,
FMX.Dialogs, FMX.StdCtrls, FMX.ScreenReader
{$IFDEF MACOS}
, FMX.ScreenReader.Mac
{$ELSE}
, FMX.ScreenReader.Win
{$ENDIF}
;
次に、フォームを TForm ではなく TAccForm から派生するようにします:
type
TForm1 = class(TAccForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
サポートされているコントロール
FireMonkey のアクセシビリティ機能の実装では、以下の表に示す標準の FireMonkey コントロールを組み込みサポートしています。
FireMonkey コントロール | アクセシビリティ クラス |
---|---|
TButton |
PUSHBUTTON |
TSpeedButton |
PUSHBUTTON |
TTracker |
SLIDER |
TEdit |
TEXT |
TListBox |
LIST |
TComboBox |
COMBOBOX |
TComboEdit |
COMBOBOX |
TSpinBox |
SPINBUTTON |
TLabel |
STATICTEXT |
TCheckBox |
CHECKBUTTON |
TRadioButton |
RADIOBUTTON |
TMainMenu |
MENU |
TMemo |
TEXT |
TTreeView |
OUTLINE ITEM |
TCustomGrid |
CELL |
FireMonkey アプリケーションでこれらのコントロールのどれを使用する場合でも、他に必要な作業はありません。TAccForm により、使用するスクリーン リーダー ソフトウェアがコントロールのテキストや状態を適切に読み取ることができるようになります。 また、これら標準の FireMonkey コントロールから派生するあらゆるコントロールもアクセシビリティ サポートを自動的に継承する点にも注意してください。
FireMonkey カスタム コントロールへのアクセシビリティ サポートの追加
アクセシビリティのサポートをカスタム コントロールに追加するには、コントロールにインターフェイス IFMXAccessibility を追加し、それを実装します。
IFMXAccessibility は次のように定義されています。
// Interface for custom controls to add accessibility support IFMXAccessibility = interface ['{49AF90E5-341A-4869-9D3E-F659670FB4D8}'] // Return the text to read by the accessibility interface function GetControlText: string; // Returns the accesibility role of the custom control function GetRole: TFMXRole; end;
このインターフェイスは次の 2 つのシンプルなメソッドで構成されています。
- GetRole: カスタム コントロールのロールを返します。
- GetControlText: コントロールにフォーカスがあるときにスクリーン リーダーが読み上げるテキストを返します。
TFMXRole 型は次のように定義されています。
TFMXRole = (rStaticText, rCell, rText, rButton, rCheckBox, rRadioButton, rGrid, rList, rSlider, rComboBox, rTabGroup);
カスタム編集コントロール(アクセサビリティ サポートをすでに備えている標準 FireMonkey 編集コントロールから派生していないもの)の場合、これは次のように実装されます:
type
TMyOwnFireMonkeyEdit = class(TControl, IFMXAccessibility)
protected
function GetControlText: string;
function GetRole: TFMXRole;
end;
implementation
{ TMyOwnFireMonkeyEdit }
function TMyOwnFireMonkeyEdit.GetControlText: string;
begin
Result := GetMyControlText,
end;
function TMyOwnFireMonkeyEdit.GetRole: TFMXRole;
begin
Result := rText;
end;