前へ

スクリーンリーダー対応アプリ作成のために

PC-Talker試用記

ダイアログボックスの読み上げ(4)

ダイアログ上のスクロールバー

Option これは、MioneMのオプション設定のダイアログである。
再生速度の調整にスクロールバーを使っている。
これは中央が100%(等速)、左端が50%(半速)、右端が200%(倍速)になるので、 こんなところに左端0%右端100%にしかならないトラックバーは使えないのが明らかである。
これのリソースファイルは以下のようになっている。(本当は多少違うが簡略化して表示)
LTEXT "再生速度(&R):", IDO_RATE, 8, 8, 48, 8
SCROLLBAR IDO_SCRL, 10, 20, 141, 8, WS_TABSTOP
LTEXT "100.0%", IDO_PERCENT, 56, 8, 25, 8
LTEXT "ピッチ", IDO_PITCH, 87, 8, 25, 8
LTEXT "+0.0半音", IDO_HANON, 116, 8, 40, 8
よって、スクロールバーにTabキーで移動した時には、「再生速度アールの選択」のように読む。
コントロール名ガイドがOnの時は、「再生速度アールのドラッグバー 選択」のように読む。
そして、ウインドウ全文読みのキー操作をしたときに
「再生速度かっこあんどアールかっことじころん ひゃくてんれいぱーせんと ぴっち ぷらすぜろぜろ半音 一度に処理するデータ長かっこあんどティーかっことじころん ……」のように読む。
あいかわらず1の位が0である小数を正しく読まないが、これでどうにかなるような気はする。
(ただ、ウィンドウ全文読みはどうしても読み上げが長くなるので、途中で中断したいところだが、 そこでEscキーを押すとダイアログが閉じてしまう。中断のためのキーは他にもあるが…)

実はここでも特定のキーを押した時に値をクリップボードにコピーというのを検討したのだが、 その特定のキーをメインウインドウ側で"C"にしていたので困ってしまった。
このダイアログではすでに"C"は「モノクロ」のアクセスキーとして使ってしまっている。
(あと、実はダイアログ上でのコントロールのサブクラス化ってやったことがなかったり)

あと、このダイアログの配置はまずいような気がする。OKとキャンセルのボタンが途中にあるので、全盲のユーザーはそれ以降にも設定項目があることに気がつかないかもしれない。
(いきあたりばったりで拡張していると、こういうことになる。まあ、Tabオーダーだけ変えればいいのだが)

マルチラインのエディットコントロール

メモ帳や、それに似た自作テキストエディタでは、起動時に「無題 マイナス メモ帳の文字入力」などと読む。
文章を読み込んでも、もちろんメニューやダイアログは読むが、ダイアログのOKボタンを押した後、メインウィンドウにフォーカスが戻っても、「無題 マイナス メモ帳の文字入力」としか読まない。
(ここで、ファイルを読み込んでいるのに「無題」と読むのは、メモ帳がタイトルバーを変更するタイミングが遅すぎるせい。自作エディタでは大丈夫だった)
そこで、上下矢印キーでキャレット(文字カーソル)を動かすと、その行を読む。(正確には、その行の中でキャレットの右にある部分だけを読む)
左右矢印キーでキャレットを動かすと、キャレットの右の一文字を読む。
そして、「ウインドウ全文読み」の操作(Ctrl+Alt+Z)をすると、メモ帳では全文を読むが、自作エディタでは読まなかった。
なぜ?と思っていろいろ試したら、どうやらWS_TABSTOPスタイルが設定されていると全文読みをしないようだ。
通常のウインドウ上にCreateWindowで貼るときは、単にWS_TABSTOPを指定しなければ良い。
ダイアログリソース上では指定しなくても自動でついてしまうので、WM_INITDIALOGのタイミングで
HWND hwndCtl = GetDlgItem(hDlg,IDEDIT);
LONG ws = GetWindowLong(hwndCtl, GWL_STYLE );
ws = ws & (~WS_TABSTOP);
SetWindowLong(hwndCtl, GWL_STYLE, ws);
のようにしてやればよい。
しかし、上の例のように、ウインドウにエディットコントロールだけしかない時はそれで良いが、他のコントロール(ボタンとか)がある時はどうしたらいいのだろう?

あと、エディットコントロールにES_READONLYスタイルをつけて、テキストビュアーとか何らかの情報のビュアーにすることがある。その場合でも、エディットコントロールはフォーカスを持つことができ、矢印キーでスクロールしたり、シフト+矢印キーで範囲選択したり、Ctrl+Cキーでそれをコピーしたりできる。しかしReadOnlyなのだから当然、文字の入力はできない。にもかかわらず、PC-Talkerは「○○の文字入力」と読む。これもどう考えてもPC-Talkerのバグだと思う。
次ページ

コメント、トラックバックはココログ