| MacOS | ![]() |
|---|---|
| Windows | ![]() |
| Swing | ![]() |
| SX-WINDOW | ![]() |
ボタンと共に、どんなGUIシステムにでも欠かせない部品がスクロールバーである。スクロールバーはその名の通りスクロールを行うためのバーだ。コンピュータの表示装置には、必ず表示できる大きさの限界というものが存在する。横1024ピクセルの解像度を持つ表示装置では、横1024ピクセル以上の大きさを持つものを一度に表示する事は出来ない。そこで一度に全てを見ることは出来ないが、見える範囲を移動できるようにして、とりあえず全ての部分が見られるようにするという手法を取る。このような動作をスクロールと呼び、見える範囲を移動する操作を行う為のものがスクロールバーだ。
![[スクロールバーの構成図]](imgs/scbar-illust.png)
スクロールバーは3つの部分から構成されている。まずは両端にある矢印。これはスクロールアローと呼ばれ、これを押すと最小移動単位分だけスクロールする。この最小移動単位のことをラインと呼ぶこともある。テキストエディタなどを思い浮かべていただければ分かりやすいのだが、つまりスクロールアローを押すとちょうど1行分スクロールするわけだ。スクロールアローを押しっぱなしにすると連続してスクロールすることもある。
両端のスクロールアローに挟まれている部分はスクロールボックスといい、スクロールボックスの中にある小さなつまみのような部分をスクロールサムと呼ぶ。この両者の位置関係は、現在のスクロール位置を表している。スクロールボックスがスクロール領域全体の大きさを表し、スクロールサムが現在見えている位置を表すという仕掛けだ。さらにスクロールサムが見えている大きさを表すこともある。全体の半分だけが見えるような場合、スクロールサムがスクロールボックスの半分の大きさになる。このようなスクロールバーをプロポーショナルスクロールバーなどと呼ぶが、現在ではプロポーショナルでないスクロールバーの方が珍しい存在となっている。
また、スクロールサムを動かすと、瞬時にその位置にスクロールするという操作を行うことが出来る。通常はサムの位置が確定するまではスクロールしないのだが、サムを動かしている最中もスクロールする場合もある。こういう動作をライブスクロールなどと呼ぶが、マシンパワーの向上した昨今、ライブでないスクロールバーの方が珍しい存在だ。
![[スクリーンショット]](imgs/scbar-ghost.png)
ゴースト
ライブでないスクロールバーの場合、サムをドラッグしている最中は、本物のサムの代わりにゴーストというものが操作される。これはドラッグ処理のラバーバンドと同じ役割を果たすものだ。ドラッグを終了すると、本物がその位置に移動してくる。
スクロールボックスをクリックすると、今度はページという単位でスクロールする。見えている範囲を1ページと考え、その分だけごそっとスクロールするわけだ。しかし、本当に1ページ分スクロールさせると、どこまでスクロールしたかが認識しづらいので、1ページよりも1ライン分少なくスクロールさせるのが定石である。たとえば下にスクロールさせた場合、一番下の行が一番上にくる程度スクロールすることになる。同じ行があることで、どの程度スクロールしたかを判断できるという訳だ。
縦と横のスクロールバーを付けた場合、大抵の場合それはスクロールする画面の右と下の端に付く。だがユーザーインタフェース的には左と下の端の方が良いという話もあり、現にある種のGUIシステムではそのような配置になっている。これはマウスカーソルは、おおむねウインドウの左側に位置しているという理由からである。スクロールする為にマウスカーソルを移動させる距離が少なくなるという訳だ。
実際、マウスカーソルがウインドウの左側部分に位置しているかどうかは、難しい問題である。右側にあるスクロールバーの為に、なるたけ右側で待機するという事を行っているかもしれないからだ。恐るべきは人間の適応能力。一旦適応してしまうと、なかなか変えられないことは、キーボードのキー配列でも証明済みである。
![[ソースとディスティネーションの関係図]](imgs/scrool-area.png)
ディスティネーション: 見える範囲
ソース: スクロールする範囲
スクロールバーの下側のアローを操作した場合、果してどちらの方向にスクロールするだろうか。下方向? いや、スクロールする方向としては上方向なのだ。スクロールバーを操作した方向と、実際にスクロールする方向が逆向きであるというのは、言われてみなければ気づかないことだと思う。
スクロールバーの下側のアローを操作した時、表示内容は上に1ライン分だけ移動し、それよりも下側にあり表示されていなかった部分が新たに表示される。つまり、より下側の部分を見たい時に下向きのアローを操作すればよいという事になっているのである。これは、動作の一貫性と、直感的な操作方法、あるいは自然な操作方法というのが、必ずしも一致しないという良い例であろう。
また、スクロールする範囲は、ソースの大きさよりも、ちょうどディスティネーションの大きさ分だけ少なくなる。このことを考慮していないソフトウェアでは、一番下までスクロールした時に、ちょうど1ページ分の何も表示されない領域が発生する。だが、余白が無いと落ち着かないなどの理由によって、故意にそうされている可能性もあるので、必ずしも不具合とは言い切れないのがスクロールの難しいところである。
スクロールバーを付けると、ディスティネーションとして表示に供される大きさは、スクロールバーの幅だけ小さくなる。当たり前の話ではあるが、動的にスクロールバーを付けたり外したりするソフトウェアでは結構痛い問題である。たとえば Netscape6でoverflow:scrollというスタイルを付けると、スクロールバーが付いたばかりにスクロールバーの幅の分だけスクロールしないと全てが見えないという、なんとも歯がゆい状況に陥るのである。このような状況は、割と色々なソフトウェアで見ることが出来る。謎のスクロール範囲を見つけ出し、ほくそ笑んでみるというのも一興かもしれない。
りゅう/rryu@t3.rim.or.jp