(57)【要約】      （修正有）【課題】スクロール可能な複数の列を有する表の表示において、表の横スクロールの際に、該横スクロール操作によって隠された列が存在することを、ユーザが、視覚的に、即時に理解できるようにする。【解決手段】表の全体が表示されていない状態において、更に、左スクローを行うことによって、表示されていた「売上数」の列が表示されなくなり、「仕入数」の列が右端の一部を除いて、隠れて表示されている。そして、表の右端が、固定列部１１３とスクロール列部１１５との間に縦隙間データ（空白）が表示されている。この結果、列名一覧表示１０１Ｃにおいては、「売上金」に加え、更に、「売上数」及び「仕入数」が非表示列の表示形態に変化している。また、スクロールによって、非表示列の表示形態で表示されていた「在庫月数」、「当月」「０８月」、「０７月」、及び「０６月」が、表示列の表示形態に変化している。【選択図】    図２５
2005267651.tif 000002
【特許請求の範囲】
【請求項１】
複数列から構成される表の表示形態を、スクロール操作に応じて制御する表示制御装置であって、前記複数列のうちの一部の列が表示されるように制御する列表示制御手段と、スクロール操作に応じて、前記列表示制御手段により表示された列を除く前記複数列のうちの一部の列が表示されるように制御するスクロール列表示制御手段と、前記スクロール操作により、前記列表示制御手段により表示された列に前記スクロール列表示制御手段により表示された列が隠された場合に、該列表示制御手段による列の表示と該スクロール列表示制御手段による列の表示との境界が、前記表の列の境界を示す形態とは異なる形態で表示されるように制御する境界表示制御手段とを有することを特徴とする表の表示制御装置。
【請求項２】
前記境界表示制御手段は、前記列表示制御手段により表示された列と前記スクロール列表示制御手段により表示された列との間に隙間を表示させることを特徴とする請求項１に記載の表の表示制御装置。
【請求項３】
前記境界表示制御手段は、前記隙間の表示と共に、前記スクロール列表示制御手段により表示された列のうち、前記列表示制御手段により表示された列に隠された列であって、該列表示制御手段により表示された列に隠されていない列に最も近い位置にある列の一部が表示されるように制御することを特徴とする請求項２に記載の表の表示制御装置。
【請求項４】
前記列表示制御手段は、前記複数列のうちの一部の列がスクロール操作に無関係に表示されるように制御することを特徴とする請求項１に記載の表の表示制御装置。
【請求項５】
複数列から構成される表の表示形態を、スクロール操作に応じて制御する表示制御方法であって、前記複数列のうちの一部の列が表示されるように制御する第一の制御を行ない、スクロール操作に応じて、前記第一の制御により表示された列を除く前記複数列のうちの一部の列が表示されるように制御する第二の制御を行ない、前記スクロール操作により、前記第一の制御により表示された列に前記第二の制御により表示された列が隠された場合に、該第一の制御による列の表示と該第二の制御による列の表示との境界が、前記表の列の境界を示す形態とは異なる形態で表示されるように制御することを特徴とする表の表示制御方法。
【請求項６】
複数列から構成される表のスクロール操作に応じた表示制御をコンピュータに実行させる、表の表示制御プログラムを記憶した該コンピュータが読み取り可能な記憶媒体であって、前記複数列のうちの一部の列を表示させる第一の制御と、スクロール操作に応じて、前記第一の制御により表示された列を除く前記複数列のうちの一部の列を表示させる第二の制御と、前記スクロール操作により、前記第一の制御により表示された列に前記第二の制御により表示された列が隠された場合に、該第一の制御による列の表示と該第二の制御による列の表示との境界が、前記表の列の境界を示す形態とは異なる形態で表示されるようにする制御をコンピュータに実行させる表の表示制御プログラムを記憶した記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、表の表示制御装置、表の表示制御方法、及び表の表示制御プログラムを記憶した記憶媒体に関する。
【背景技術】
【０００２】
エディタ、ワープロ、及び表計算ソフトなどのソフトウェアの表示においては、スクロールは必須の機能になっている。スクロールは、ディスプレイの１画面にデータを表示しきれないとき、表示画面を上下左右に移動して残りの部分を表示する機能である。すなわち、エディタ、ワープロでは、テキストが複数ページである場合、また、表計算ソフトなどでは、「ワークシート」が複数行×複数列で構成される場合、ユーザは、スクロール操作を行うことによって、所望の行や所望の列を閲覧することができる。
【０００３】
また、該スクロール機能は、会計業務などの帳票画面の表示にも利用される。図２７は、従来の横スクロール操作が行われた１枚のワークシートの表示画面の一例を示す図である。
【０００４】
ワークシートは、等間隔で配置された複数の縦線並びに複数の横線によって格子状に区切られた複数のマス目から構成されており、これらのマス目の一つ一つは、一般に、「セル」と呼ばれている。そして、これら複数のセルの位置は、列番号と行番号とによって特定される。同図に示すように、列番号は、左から順に、「Ａ列、Ｂ列、・・・」とアルファベット順に、また、行番号は、上から順に、「１行目、２行目、・・・」と表される。この場合、３行目の２列目にあるセルは、一般に、「Ｂ３セル」と呼ばれる。
【０００５】
同図に示すワークシート２００は、スクロール操作の対象外の領域である固定領域２１０と、スクロール操作の対象領域であるスクロール領域２２０に別れており、スクロール領域２２０のみでスクロールが可能になっている。すなわち、固定領域２１０はＡ列とＢ列から構成されており、スクロール領域２２０は、それら以外のＣ列以降の列から構成されている。
【０００６】
同図は、スクロール領域２２０において、Ｃ列〜Ｈ列までが左方向にスクロールされた状態を示している。この場合、Ｂ列とＩ列との境界２３０が、固定領域２１０とスクロール領域２２０との境界である。また、従来、帳票画面として、図２８に示すような、階層構造を有する「括り表」が知られている。同図は、該括り表の一例である「商品売上実績表」を示す図である。商品の場合、一つの商品が複数のカテゴリに分類され、さらに、各カテゴリーが、複数の実際に販売されている商品に分類されるというように、階層構造で表現される。このような階層構造を表形式で表現したのが括り表である。
【０００７】
図２８は、括り表の一つである「商品売上実績表」の一部が表示されている。この場合、表示されているのは、「電卓」という商品の売上実績表の一部であり、「電卓」の中の「ＤＩＡＲＹ」として分類される複数の「商品」に関する売上実績が表示されている。この場合、最上位の階層に属するのは「電卓」であり、次の階層の属するのは「ＤＩＡＲＹ」、そして、最下位の階層に属するのは「０１１２１２３  ＳＦ−４４００」、「０１１２９９８  ＤＫ−Ｊ８５」、・・・等の商品名である。
【０００８】
この場合、「電卓」の中には「ＤＩＡＲＹ」以外のカテゴリが含まれる。したがって、「電卓」以外のカテゴリの商品を表示する場合には、縦スクロール操作が必要となる。また、「ＤＩＡＲＹ」に属する他の商品を表示させる場合にも、縦スクロール操作が必要となる。すなわち、最上位層に属する「商品」以外の下位の階層においては、共に、縦スクロール操作が必要である。従来、このような縦スクロール操作が行われた場合、階層構造を意識せずに、通常のワープロやエディタと同様な方法でスクロール表示が行われていた。
【０００９】
また、さらに、画面上に表示されている表が全体の一部であることをユーザに知らせる方法として、該表の脇に設けられたスクロールバー領域の中に「スクロールスライダー」を表示する方法が採用されていた。このような従来の方法においては、現在、画面に表示されていない列を表示するためには、該スクロールスライダーを動かす、或いはスクロールバーと該スクロールスライダーとの間の余白をクリックする、またはスクロールバーの両端のエリアをクリックするなどの操作を、所望の列が表示されるまで、繰り返す必要があった。
【００１０】
上記スクロールスライダーを動かす方法の場合、スクロールスライダーの移動量と列の表示移動量とを比例させ、移動に合わせながら列を１列づつスクロールさせるようにしていた。また、上記スクロールバーとスクロールスライダーとの間の余白をクリックする方法の場合、クリックすることにより、所定の列数分、一度に移動させるようにしていた。また、さらに、上記スクロールバーの両端のエリアをクリックする方法の場合、クリックする毎に、１列づつスクロールするようにしていた。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
図２７に示すように、従来のスクロール装置においては、固定スクロール領域２１０とスクロール領域２２０との境界２３０は、スクロール領域２２０の外枠と同様に表示されていた。このため、同図に示すように、スクロール領域２２０の先頭が、列の区切り（この場合、Ｉ列の左端）と一致する場合、固定領域２１０の右端の列（この場合、Ｂ列）と現時点のスクロール領域２２０の先頭の列（この場合、Ｉ列）との間に存在する列（この場合、Ｃ列〜Ｈ列）が、スクロールによって隠されていることを判断するのが難しかった。このような場合、従来は、列見出し名の順番（この場合、Ａ列、Ｂ列、Ｉ列、Ｊ列、Ｋ列、・・・）、または、画面の右端や下端等に表示されるスクロールバーのスクロール量の表示に頼っていた。
【００１２】
また、図２８に示すような括り表の場合、スクロール操作の対象領域の項目数が多いと、それらの項目は１画面に収まらないので、必然的に、縦スクロール操作が必要となる。しかしながら、縦スクロール操作を行うと、該項目の上位の階層を示す項目が画面から消えてしまい、画面の表示されている項目が、いかなる項目に属するのか分からなくなってしまうという問題があった。例えば、図２８の例では、例えば、「ＤＩＡＲＹ」の表示が画面から消えてしまい、「ＤＩＡＲＹ」の属する個々の商品名のみが表示される。この場合、商品名のみの表示となるため、縦スクロール操作を繰り返しているうちに、画面に表示されている商品名がいかなるカテゴリーに属するのか分からなくなってしまことが、しばしば、起こり得た。したがって、途中で、逆方向の縦スクロール操作を行い、現在、注目している商品名のカテゴリーを確認するなど、非効率的な操作を行わねばならないなどの不都合があった。
【００１３】
また、上記表脇のスクロールバー領域の中にスクロールスライダーを表示するという方法では、現在、画面に表示されている表が全体の一部であり、隠れて見えない部分があるのは分かるものの、該見えない部分にどのような列があるのか分からない、という問題があった。また、さらには、スクロール操作を行い、表の中ほどを表示中に、見たい列が生じた時、その列が、現在、表示中の部分に対していずれの側に存在するのか分からないので、スクロールする方向を判断するのに迷ってしまうという問題もあった。
【００１４】
また、見たい列が隠れているとき、その列が、現在、注目している列から何列目にあるのかが分からないため、スクロールする量を判断できず、行き過ぎたりしないように、スクロール操作を慎重に行わなければならないという問題があった。
【００１５】
また、上記スクロールスライダーを動かす方法の場合、上記スクロールバーとスクロールスライダーとの間の余白をクリックする方法の場合、または上記スクロールバーの両端のエリアをクリックする方法の場合のいずれの場合も、所望する列の位置が明確に分からないので、その列が見つかるまで操作を繰り返したり、あるいは、スクロールしすぎて戻ったりするなど、操作性が良くないなどの問題があった。
【００１６】
本発明の目的は、表の横スクロールの際に、該横スクロール操作によって隠された列が存在することを、ユーザが、視覚的に、即時に理解できるようにすることである。
【課題を解決するための手段】
【００１７】
本発明の表の表示制御装置は、複数列から構成される表の表示形態を、スクロール操作に応じて制御する表示制御装置を前提とする。そして、前記複数列のうちの一部の列が表示されるように制御する列表示制御手段と、スクロール操作に応じて、前記列表示制御手段により表示された列を除く前記複数列のうちの一部の列が表示されるように制御するスクロール列表示制御手段と、前記スクロール操作により、前記列表示制御手段により表示された列に前記スクロール列表示制御手段により表示された列が隠された場合に、該列表示制御手段による列の表示と該スクロール列表示制御手段による列の表示との境界が、前記表の列の境界を示す形態とは異なる形態で表示されるように制御する境界表示制御手段とを有することを特徴とする。
【００１８】
上記構成の表示制御装置によれば、スクロール操作に応じて表示されるはずである列の中に、他の列の表示により隠されて表示されていない列が存在することを、即時に認識することができる。
【００１９】
本発明の表の表示制御方法は、複数列から構成される表の表示形態を、スクロール操作に応じて制御する表示制御方法であって、前記複数列のうちの一部の列が表示されるように制御する第一の制御を行ない、スクロール操作に応じて、前記第一の制御により表示された列を除く前記複数列のうちの一部の列が表示されるように制御する第二の制御を行ない、前記スクロール操作により、前記第一の制御により表示された列に前記第二の制御により表示された列が隠された場合に、該第一の制御による列の表示と該第二の制御による列の表示との境界が、前記表の列の境界を示す形態とは異なる形態で表示されるように制御することを特徴とする。
【発明の効果】
【００２０】
以上、説明したように、本発明によれば、スクロールされない固定領域とスクロール可能なスクロール領域とで構成される表を表示する際、スクロール操作により、該固定領域によって隠された列または行が存在する場合と存在しない場合とで、該固定領域と該スクロール領域との境界の表示形態を変化させるので、該スクロール領域内に隠されている列または行が存在することを、視覚的に分りやすく表示することができる。
【発明を実施するための最良の形態】
【００２１】
以下、図面を参照しながら、本発明の実施形態を説明する。
図１は、本発明の実施形態のスクロール装置を備えた情報処理装置のシステム構成を示す図である。
【００２２】
同図において、表情報テーブル１０は、表データ記憶部１１、表属性情報テーブル１３、及び表データ属性情報記憶部１５から成る。
表データ記憶部１１は、階層構造を有する括り表（以下、単に表と記載する場合もある）のデータを記憶するメモリである。表属性情報テーブル１３は、上記括り表の属性に関する情報を格納するテーブルである。該属性は、階層レベル数、表列数、及び表行数である。階層レベル数は、括り表の階層数である。表列数は、上記括り表の列の総数である。表行数は、上記括り表の行の総数である。
【００２３】
表データ属性情報記憶部１５は、上記括り表の各列の属性情報を記憶するメモリである。上記属性情報は、列名称、列幅、及び列表示状態フラグである。列名称は、上記括り表の各列の名称である。列幅は、上記括り表の各列の幅である。列表示状態フラグは、上記括り表の各列の表示状態を示すフラグである。
【００２４】
上記括り表を構成する各列は、常時、表示される固定列とスクロール可能な列（スクロール列）に区分される。そして、スクロール列は、画面に表示されている表示列と、画面に表示されていない非表示列に区分される。上記列表示状態フラグは、上記括り表を構成する各列の３種類の状態、すなわち、「固定列」、「表示列」、または「非表示列」のいずれか一つを示す。
【００２５】
表データ生成部２０は、上記表情報テーブル１０に格納されている情報を基に、上記括り表を表示するために必要な表データ及び隙間データを生成し、これらを表示メモリ３０内に書き込む。
【００２６】
表示メモリ３０は、表示データバッファ３１と隙間データバッファ３２を有する。上記表データ生成部２０によって生成された表データと隙間データは、それぞれ、表示データバッファ３１及び隙間データバッファ３２に書き込まれる。
【００２７】
列名情報生成制御部４０は、列名幅情報調整部４１と列幅情報テーブル４３を有し、上記括り表の全ての列の列名が、一行に一覧表示されるために必要となる列幅情報を作成する。列名幅情報調整部４１は、表属性情報テーブル１３の表データ属性情報記憶部１５に記憶されている情報を参照して、上記列幅情報を作成し、これを列幅情報テーブル４３に格納する。
【００２８】
列名表示データ生成部５０は、列幅情報テーブル４３を参照して、表データ属性情報記憶部１５から上記括り表の各列の名称（列名）を読みだし、列名一覧データを生成する。
【００２９】
列名一覧データバッファ６０は、列名表示データ生成部５０によって生成された上記列名一覧データを格納する。
表データ表示制御部７０は、列名一覧データバッファ６０を参照して、表示装置８０の画面の下方に表示させる。また、表データ表示制御部７０は、表データ生成部２０を介して、表示メモリ３０をアクセスし、表示データバッファ３１から上記括り表の表示データを読みだすと共に、隙間データバッファ３２から隙間データを読みだして、これらのデータを基に、表示装置８０の画面に括り表を表示させる。
【００３０】
表データ表示制御部７０は、内部に、表座標が設定されるレジスタ７１と列名の表座標が設定されるレジスタ７２を備える。表データ表示制御部７０は、さらに、表示装置８０の画面に表示される表の幅（表幅）を格納するレジスタ７３、該表の高さ（表高）を格納するレジスタ７４、行の高さを格納するレジスタ７５、隙間行の高さを格納するレジスタ７６、及び列名修飾情報を格納するレジスタ７７を備える。表データ表示制御部７０は、後述するように、これらのレジスタに格納されているデータを基に、括り表の表示制御を行う。
【００３１】
表示装置８０は、ＣＲＴディスプレイ、ＬＣＤ、プラズマ・ディスプレイ等のディスプレイである。
入力装置９０は、括り表を生成するための入力や、該括り表へのデータ、該括り表のスクロール操作等を行うための入力装置であり、例えば、キーボード、マウス等のポインティングデバイスから成る。
【００３２】
スクロール制御部１００は、入力装置９０でスクロール操作が行われた場合、そのイベントを、表データ表示制御部７０に通知する。
外部記憶装置１１０は、表情報テーブル１０に展開される括り表のデータを記憶する記憶装置であり、ハードディスクや光ディスク装置等から成る。
【００３３】
図２は、上記表情報テーブル１０のデータ構造を示す図である。同図（ａ）は、表データ記憶部１１に格納される表データテーブル１１ａの構成を示す図である。該表データテーブル１１ａの各行は、「階層レベル」、「列１」、「列２」、「列３」、・・・「列ｎ」（ｎは任意の正の整数）の各フィールドから成るレコードとなっている。表データテーブル１１ａには、このようなデータ構造のレコードが、括り表の階層順に、格納される。
【００３４】
階層レベルは、階層順位を示す数値であり、最上位階層の階層レベルは“１”であり、最上位階層より下位の階層には、階層レベルとして、階層順に、それぞれ、“２”、“３”、・・・が割り当てられる。また、表データテーブル１１ａの各行には、先頭から「１」、「２」、「３」、・・・のシリアル番号からなる行番号が割り当てられている。
【００３５】
また、同図（ｂ）は、上記表属性情報テーブル１３の構成を示す図である。同図（ｂ）に示すように、表属性情報テーブル１３には、同図（ａ）に示す表データテーブル１１ａの構成に関する、「階層レベル数」、「表行数」、及び「表列数」の３種類の情報が格納される。
【００３６】
「階層レベル数」は、表の階層数を示す情報であり、同図（ａ）に示す表データテーブル１１ａにおいては“３”となる。また、「表行数」は、表データテーブル１１ａに含まれる総行数を示す情報であり、同図（ａ）に示す表データテーブル１１ａにおいては“３００”となっている。このため、同図（ｂ）に示すように、表属性情報テーブル１３においては、「階層レベル数」、「表行数」、及び「表列数」の値が、それぞれ、“３”、“３００”、及び“１２”となっており、表データテーブル１１ａには、階層レベルが“１”〜“３”までの３階層で、総行数が“３００”、総列数が“１２”の括り表の表データが格納されていることを示している。
【００３７】
次に、同図（ｃ）は、上記表データ属性情報記憶部１５に格納される表データ属性情報テーブル１５ａの構成を示す図である。
表データ属性情報テーブル１５ａは、同図（ａ）の表データテーブル１１ａのｎ個の「列１」〜「列ｎ」について、「列名称」、「列幅」、及び「列表示状態フラグ」の３種類の属性情報を格納している。列表示状態フラグは、上述したように、括り表を構成する各列の３種類の状態、すなわち、「固定列」、「表示列」、または「非表示列」のいずれか一つを示すフラグであり、固定列であれば“０”が、表示列であれば“１”が、非表示列であれば“２”が設定される。
【００３８】
次に、図１の情報処理装置の全体の動作フローを、図３のフローチャートを参照しながら、説明する。
まず、外部記憶装置１１０から括り表に関するデータを読みだして、表情報テーブル１０を生成する（ステップＳ１）。
【００３９】
これにより、表データ記憶部１１に表データテーブル１１ａが格納され、表データ属性情報記憶部１５に表データ属性情報テーブル１５ａが格納され、さらに、表属性情報テーブル１３が生成される。
【００４０】
次に、表データ生成部２０が、上記表情報テーブル１０を参照して、列見出しデータの生成（ステップＳ２）、階層部のデータ生成（ステップＳ３）、データ行部のデータ生成（ステップＳ４）、横隙間データの生成（ステップＳ５）、縦隙間データの生成（ステップＳ６）を、順に実施する。
【００４１】
次に、ステップＳ２で生成された列見出しデータを、表データ生成部２０及び表データ表示制御部７０を介して、表示装置８０に書き出す（ステップＳ７）。続いて、ステップＳ３で生成された階層部データを、表データ生成部２０及び表データ表示制御部７０を介して、表示装置８０に書き出す（ステップＳ８）。さらに、続いて、ステップＳ４で生成されたデータ行部データを、表データ生成部２０及び表データ表示制御部７０を介して、表示装置８０に書き出す（ステップＳ９）。
【００４２】
これにより、表示装置８０の画面には、括り表の初期画面が表示される。
次に、列名情報生成制御部４０が列幅情報テーブル４３内に列幅情報を生成する（ステップＳ１０）。続いて、列名幅情報調整部４１が、表データ属性情報テーブル１５ａを参照して、列名幅を調整する（ステップＳ１１）。この列名幅を調整する処理は、表データ属性情報テーブル１５ａの列表示状態フラグを更新する処理である。この処理の詳細は、後述する。
【００４３】
次に、列名表示データ生成部５０が、ステップＳ１１で更新された表データ属性情報テーブル１５ａを参照して、列名一覧データバッファ６０内に列名一覧データを生成する（ステップＳ１２）。続いて、表データ表示制御部７０が、ステップＳ１３で生成された列名一覧データを表示装置８０に書き出す（ステップＳ１３）。これにより、表示装置８０の画面に列名一覧データが初期表示される。
【００４４】
次に、スクロール制御部１００が、入力装置９０からの入力データを基に、入力装置９０において表示クリックイベントの操作が行われたか判別する（ステップＳ１４）。この判別がＮＯである間は（ステップＳ１４、ＮＯ）、ステップＳ１４の処理を繰り返す。
【００４５】
そして、該表示クリックイベントの操作が行われたと判別したならば（ステップＳ１４、ＹＥＳ）、そのクリックイベントが、横スクロールを指示する横スクロールクリックイベントであるか判断する（ステップＳ１５）。そして、横スクロールクリックイベントであれば（ステップＳ１５、ＹＥＳ）、スクロール制御部１００はその旨を、表データ表示制御部７０に通知する。表データ表示制御部７０は、その通知を受け取ると、横スクロール処理を行う（ステップＳ１６）。この横スクロール処理の詳細は後述する。横スクロール処理が終了すると、ステップＳ１４に戻る。
【００４６】
一方、ステップＳ１５で横スクロールクリックイベントでないと判断すると、スクロール制御部１００は、縦スクロールを指示する縦スクロールクリックイベントであるか判断する（ステップＳ１７）。そして、縦スクロールクリックイベントであると判断すると（ステップＳ１７、ＹＥＳ）、スクロール制御部１００はその旨を、表データ表示制御部７０に通知する。表データ表示制御部７０は、その通知を受け取ると、縦スクロール処理を行う（ステップＳ１８）。この縦スクロール処理の詳細は後述する。縦スクロール処理が終了すると、ステップＳ１４に戻る。
【００４７】
一方、ステップＳ１７で、縦スクロールクリックイベントでないと判断した場合には（ステップＳ１７、Ｎ０）、ステップＳ１４に戻る。
図４は、ステップＳ２〜Ｓ６で、表示データバッファ３１及び隙間データバッファ３２内に生成される各データの構造を示す図である。
【００４８】
同図（ａ）は、表示データバッファ３１の全体構造を示す図である。
表示データバッファ３１には、括り表の全表示データが格納される。括り表は、縦方向と横方向に区分される。まず、縦方向について説明すると、表示データバッファ３１の先頭は列見出し部データバッファ３１Ａとなっており、続いて、階層部データバッファ３１Ｂ、データ行部データバッファ３１Ｃの順に配置されている。同図（ａ）は、３階層の括り表用表示データバッファ３１の例である。
【００４９】
上記列見出し部データバッファ３１Ａ、階層部データバッファ３１Ｂ、及びデータ行部データバッファ３１Ｃは、横方向には、固定列部３１Ｅとスクロール列部３１Ｆとに区分されている。固定列部３１Ｅは、横スクロールが不可能な領域である。これに対し、スクロール列部３１Ｆは、横スクロールが可能な領域である。なお、固定列部３１Ｅあるいはスクロール列部３１Ｆとする領域は任意に設定できる。
【００５０】
同図（ａ）に示すように、列見出し部データバッファ３１Ａの固定列部３１Ｅとスクロール列部３１Ｆの先頭アドレスは、それぞれ、Ｔ１ポインタとＴ２ポインタによって指定される。
【００５１】
また、階層部データバッファ３１Ｂは、同図（ａ）においては、３行から構成されるように示されているが、後述するように、実際には６行から構成される。すなわち、同図（ａ）に示されている各行は、実際には、奇数行と偶数行の２行から成っている。すなわち、例えば、同図（ａ）において、先頭アドレスがＬ１ポインタで示される固定列部３１Ｅの行は、実際には、先頭アドレスが、それぞれ、Ｌ１−１ポインタ、Ｌ１−２ポインタによって指定される奇数行と偶数行の２つの行から構成されている。また、先頭アドレスがＳ１ポインタで示される同じ行のスクロール列部３１Ｆの先頭アドレスは、先頭アドレスが、それぞれ、Ｓ１−１ポインタ、Ｓ１−２ポインタによって指定される奇数行と偶数行の２つの行から構成されている。階層部データバッファ３１Ｂの他の２行も、同様である。
【００５２】
また、データ行部データバッファ３１Ｃは、図２（ａ）の４行目以降のデータを格納しており、固定列部３１Ｅの先頭アドレスはポインタＬ４によって指定され、スクロール列部３１Ｆの先頭アドレスはポインタＳ４によって指定される。
【００５３】
尚、階層部データバッファ３１Ｂとデータ行部データバッファ３１Ｃは、全体で、Ｌバッファを構成している。このＬバッファは、同図（ａ）に示す行単位でアクセス可能であり、例えば、ｉ行目のデータはＬ（ｉ）で読出可能である。尚、ｉはインデックスである。また、固定列部３１Ｅの各行のデータはＬデータと呼ばれ、スクロール列部３１Ｆの各行のデータはＳデータと呼ばれる。該Ｌデータ、該Ｓデータの先頭アドレスは、同図（ａ）に示すＬ１、Ｓ１、・・・等のポインタによって指定される。
【００５４】
また、表示装置８０の画面に括り表（表）が表示される場合には、上記列見出しデータバッファ３１Ａ、階層部データバッファ３１Ｂ、及びデータ行部データバッファ３１Ｃ内に格納されている行データが表示されるが、画面上の表において、列見出しデータバッファ３１Ａの行データが表示される行を「列見出し部」、階層部データバッファ３１Ｂの行データが表示される複数行を「階層部」、データ行部データバッファ３１Ｃの行データが表示される複数行を「データ行部」と呼ぶ。
【００５５】
同図（ｂ）は、隙間データバッファ３２に格納される５種類の隙間データを示す図である。尚、各隙間データの前のＣ１〜Ｃ５は、該隙間データの先頭アドレスを指すポインタである。ポインタＣ１〜Ｃ４でアドレスされる隙間データ３２Ａ〜３２Ｄは、縦スクロールが行われた際に、隙間行データを生成するために使用されるデータである。隙間データ３２Ａ〜３２Ｃは固定列部３１Ｅの隙間行データの生成のため、また、隙間データ３２Ｄはスクロール列部３１Ｆの隙間行データの生成のために使用される。また、ポインタＣ５でアドレスされる隙間データ３２Ｅは隙間列データを生成するために使用されるデータである。隙間データ３２Ｅは、横スクロールが行われた際に、固定列部３１Ｅとスクロール列部３１Ｆとの境界に配置される。なお、固定部３１Ｅの領域は任意に設定できる。
【００５６】
尚、以後の説明では、ポインタＣｉ（ｉ＝１〜５）が指す隙間データを、便宜上、隙間データＣｉと呼ぶ場合もある。また、隙間データＣ１〜Ｃ４を横隙間データ、隙間データＣ５を縦隙間データと呼ぶ場合もある。
【００５７】
次に、列幅情報テーブル４３と列名一覧データバッファ６０の構成を、それぞれ、図５（ａ）、（ｂ）に示す。
同図（ａ）に示すように、列幅情報テーブル４３は、括り表を構成している「列１」〜「列ｎ」のｎ個の列について、Ｘ座標「Ｘｉ」と列幅Ｌｉの情報を格納している（ｉ＝１〜ｎ）。該Ｘ座標「Ｘｉ」は、「列ｉ」の列名を表示する際の始点Ｘ座標である。また、列幅Ｗｉは「列ｉ」の横幅である（同図（ｂ）参照）。
【００５８】
また、同図（ｂ）に示すように、列名一覧データバッファ６０は、「列１」〜「列ｎ」のｎ個の列について、その列の名称（列名）を格納している。同図（ｂ）の例では、「列１」、「列２」、「列３」、・・・「列ｎ」の列名が、それぞれ、「ＸＸＸ」、「ＹＹＹＹ」、「ＺＺ」、・・・、「ＡＢＣ」となっている。
【００５９】
次に、図３のフローチャートのステップＳ２〜Ｓ９までの処理（表データ表示の初期処理）の詳細を、図６のフローチャートに示す。このフローチャートの処理を、図８を参照しながら説明する。
【００６０】
まず、座標Ｘ１と座標Ｙに“０”を設定する（ステップＳ３１）。尚、Ｘ１、Ｙは、それぞれ、表示装置８０の画面上に設定される２次元Ｘ−Ｙ座標系における、Ｘ座標、Ｙ座標を示す変数である。表示データバッファ３１には、上記２次元Ｘ−Ｙ座標系と同様な座標系が設定されるものとする。
【００６１】
次に、列見出し部データバッファ３１Ａの、上記座標（Ｘ１，Ｙ）に対応する位置から、固定列部３１Ｅを構成する各列の列名（列見出し名）を書き込む（ステップＳ３２）。すなわち、表示装置８０の画面の左上隅の座標（０、０）から上記固定列部３１Ｅの各列の列名が表示されるように、該各列の列名を、列見出し部データバッファ３１Ａに書き込む。
【００６２】
続いて、座標Ｘ２に、上記固定列部３１Ｅを構成する各列の幅の累計値を設定する（ステップＳ３３）。座標Ｘ２も、表示装置８０の画面上に設定される２次元Ｘ−Ｙ座標系におけるＸ座標を示す変数である。
【００６３】
次に、列見出し部データバッファ３１Ａの、座標（Ｘ２，Ｙ）に対応する位置から、スクロール列部３１Ｆを構成する各列の列名（列見出し名）を書き込む。
上記ステップＳ３１〜Ｓ３４の処理により、図８（ａ）に示すように、列見出し部データバッファ３１Ａには、固定列部３１Ｅの列見出し名「ＸＸＸ、ＹＹＹＹ」とスクロール列部３１Ｆの列見出し名「ＺＺ、・・・、ＡＢＣ」が書き込まれる。尚、同図（ａ）に示す「Ｔ１」、「Ｔ２」は、図４に示すポインタＴ１、Ｔ２であり、それぞれ、列見出し部データバッファ３１Ａの固定列部３１Ｅの先頭アドレス、スクロール列部３１Ｆの先頭アドレスである。
【００６４】
次に、表データテーブル１１ａの先頭行から順に、１行単位で、１行分のデータを読みだす（ステップＳ３５）。そして、まず、該データから階層部の固定列部の表示データを生成し、これを、階層部データバッファ３１Ｂの固定列部３１Ｅの当該領域に書き込む（ステップＳ３６）。続いて、上記ステップＳ３５で読みだしたデータから、上記階層部のスクロール列部の表示データを生成し、これを、階層部データバッファ３１Ｂのスクロール列部３１Ｆの当該領域に書き込む（ステップＳ３７）。
【００６５】
次に、表属性情報テーブル１３の階層レベル数に等しい階層レベルの全てのデータを、表データテーブル１１ａから読みだしたか判別する（ステップＳ３８）。そして、該全てのデータを、まだ、読みだしていないならば（ステップＳ３８、Ｎ０）、ステップＳ３５に戻り、表データテーブル１１ａから次の行のデータを読みだす（ステップＳ３５）。
【００６６】
以上のようにして、表データテーブル１１ａから階層部の全ての行のデータを読みだすまで、ステップＳ３５〜Ｓ３８の処理を繰り返す。そして、該全ての行のデータの読出が終了したと判別したならば（ステップＳ３８、ＹＥＳ）、ステップＳ３９に移る。
【００６７】
上記ステップＳ３５〜Ｓ３８の処理により、表データテーブル１１ａが、図２（ａ）に示す内容であった場合には、同図（ａ）に示す表データテーブル１１ａの先頭の３行の階層レベルが“１”（Ｌ１−２）〜“３”（Ｌ３−２）までの行データが、階層部データバッファ３１Ｂに書き込まれる。すなわち、表データテーブル１１ａ内の行番号が「１」〜「３」の行データが階層部データバッファ３１Ｂに書き込まれる。
【００６８】
ところで、階層部データバッファ３１Ｂに対して、図８（ｂ）の左側に示すような階層部データバッファ管理テーブル３１Ｄが設けられている。階層部データバッファ管理テーブル３１Ｄは、階層部データバッファ３１Ｂに格納されている各行のデータを管理するためのテーブルであり、本実施形態では、同図（ｂ）の右側に示すように、階層部データバッファ３１Ｂが６行で構成されているため、これに対応して、階層部データバッファ管理テーブル３１Ｄは６行から構成されている。
【００６９】
階層部データバッファ管理テーブル３１Ｄの各行は、「行番号」、「行高さ」、「Ｌポインタ」、及び「Ｓポインタ」の４つのフィールドで構成されている。同図（ｂ）は、初期表示の際の階層部データバッファ管理テーブル３１Ｄの内容を示している。「Ｌポインタ」、及び「Ｓポインタ」は、階層部データバッファ３１Ｂの対応する行の先頭アドレスを指すポインタを格納するフィールドである。
【００７０】
同図（ｂ）に示すように、階層部データバッファ３１Ｂの第１行の固定列部３１Ｅとスクロール列部３１Ｆの先頭アドレスは、それぞれ、ポインタＬ１−１、Ｓ１−１で指定される。また、第２行の固定列部３１Ｅとスクロール列部３１Ｆの先頭アドレスは、それぞれ、ポインタＬ１−２、Ｌ１−２で指定され、第３行の固定列部３１Ｅとスクロール列部３１Ｆの先頭アドレスは、それぞれ、ポインタＬ２−１、Ｌ２−１で指定され、第４行の固定列部３１Ｅとスクロール列部３１Ｆの先頭アドレスは、それぞれ、ポインタＬ２−２、Ｌ２−２で指定され、第５行の固定列部３１Ｅとスクロール列部３１Ｆの先頭アドレスは、それぞれ、ポインタＬ３−１、Ｌ３−１で指定され、第６行の固定列部３１Ｅとスクロール列部３１Ｆの先頭アドレスは、それぞれ、Ｌ３−２、Ｌ３−２で指定される。
【００７１】
また、「行高さ」は、階層部データバッファ３１Ｂの対応する行に格納されているデータの縦方向の表示幅を格納するフィールドであり、「行番号」は、階層部データバッファ３１Ｂの対応する行に格納されているデータの行番号を格納するフィールドである。
【００７２】
初期表示の際には、同図（ｂ）に示すように、ステップＳ３５〜Ｓ３８で表データテーブル１１ａから読みだされた、行番号が「１」〜「３」の行表示データは、それぞれ、階層部データバッファ３１Ｂの第２、４、６行に書き込まれる。すなわち、同図（ｂ）に示すように、行番号が「１」の行表示データの固定列部３１Ｅとスクロール列部３１Ｆのデータは、それぞれ、階層部データバッファ３１ＢのポインタＬ１−２、Ｓ１−２が指すアドレスに格納される。また、行番号が「２」の行表示データの行表示データの固定列部３１Ｅとスクロール列部３１Ｆのデータは、それぞれ、階層部データバッファ３１ＢのポインタＬ２−２、Ｓ２−２が指すアドレスに格納され、行番号が「３」の行表示データの行表示データの固定列部３１Ｅとスクロール列部３１Ｆのデータは、それぞれ、階層部データバッファ３１ＢのポインタＬ３−２、Ｓ３−２が指すアドレスに格納される。また、上記行番号が「１」〜「３」の行表示データは、いずれも、その縦幅（行高さ）が「Ｈ」である。
【００７３】
また、初期表示の際には、階層部データバッファ管理テーブル３１Ｄの奇数行である第１、３、５行の「行番号」は“−”であり、「行高さ」は“０”となっている。これは、階層部データバッファ３１Ｂの第１、３、５行には、“ＮＵＬＬ”が格納されていることを示している。
【００７４】
尚、本実施形態では、階層部データバッファ管理テーブル３１Ｄの各行をＤバッファと呼び、ｉ行のＤバッファをＤ（ｉ）で示す。また、上述したように、階層部データバッファ３１Ｂの各行を、Ｌバッファと呼び、ｉ行のＬバッファをＬ（ｉ）で示す。
【００７５】
図６のフローチャートの説明に戻る。
次に、表データテーブル１１ａの第４行目から、表示データバッファ３１のデータ行部データバッファ３１Ｃに格納するデータを、１行単位で、順に読みだす（ステップＳ３９）。続いて、該読みだしたデータを基に、括り表のデータ行部のデータを生成し、これをデータ行部データバッファ３１Ｃの当該領域に書き込む（ステップＳ４０）。そして、次に、表属性情報テーブル１３の表行数（行数）を参照して、表データテーブル１１ａから括り表のデータ行部の全てのデータを読みだしたか判断し（ステップＳ４１）、まだ、該全てのデータを読みだしていなければ（ステップＳ４１、ＮＯ）、ステップＳ３９に戻って、表データテーブル１１ａから括り表のデータ行部の全てのデータを読みだす。
【００７６】
このようにして、ステップＳ３９〜Ｓ４１の処理を繰り返し、ステップＳ４１で、表データテーブル１１ａから、括り表の全てのデータ行部の全てのデータを読みだしたと判断すると（ステップＳ４１、ＹＥＳ）、ステップＳ４２に移る。
【００７７】
上記ステップＳ３９〜Ｓ４１の処理により、表データテーブル１１ａが、図２（ａ）に示す内容であった場合には、第４行目以降の全ての行データが、データ行部データバッファ３１Ｃに書き込まれる。
【００７８】
この結果、図８（ｃ）に示すように、ポインタＬ４の指すアドレスを先頭アドレスとするデータ行部データバッファ３１Ｃに、括り表のデータ行部の全てのデータが書き込まれる。尚、上述したように、データ行部データバッファ３１Ｃも、固定列部３１Ｅとスクロール列部３１Ｆとに分割されて格納される。
【００７９】
図６のフローチャートの説明に戻る。
ステップＳ４２では、括り表の階層レベル数分の横隙間データを生成し、これらの横隙間データを隙間データバッファ３２に書き込む（ステップＳ４２）。次に、縦隙間データを生成し、これを、隙間データバッファ３２に書き込む（ステップＳ４３）。
【００８０】
ステップＳ４２とＳ４３の処理により、図８（ｄ）に示すように、隙間データバッファ３２には、ポインタＣ１〜Ｃ４が指すアドレスの４個の横隙間データが書き込まれると共に、ポインタＣ５が指すアドレスに縦隙間データが書き込まれる。
【００８１】
次に、データ行の表示先頭行カウンタ（不図示）に、表属性情報テーブル１３に設定されている階層レベル数を設定する（ステップＳ４４）。図２（ｂ）の例では、該表示先頭行カウンタには“３”が設定される。この処理は、表示先頭行カウンタを初期設定する処理である。
【００８２】
続いて、列見出し部データバッファ３１Ａの内容の中で、初期表示されるデータを表示装置８０に書き出す（ステップＳ４５）。
ここで、列見出し部データバッファ３１Ａ、階層部データバッファ３１Ｂ、及びデータ行部データバッファ３１Ｃと、表示装置８０の画面との関係を、図９を参照しながら説明する。
【００８３】
表示装置８０の画面のサイズが、括り表全体のイメージデータよりも小さい場合、表示装置８０の画面には、括り表の全体を一度に表示することはできない。このため、ユーザは、括り表の全てのデータを閲覧するために、縦スクロール操作及び横スクロール操作を行う必要がある。ここで、表示装置８０の画面上の、括り表の表示領域の内、列見出しデータの表示域を除外した領域の水平方向の長さを「表幅」、垂直方向の長さを「表の高さ」と定義する。
【００８４】
図９で、斜め縞で示した部分が、表示装置８０の画面に表示される括り表の初期表示部分である。図９の例では、表幅＝ＸＥ（＝ＤＸＥ）となっている。また、列見出し部データバッファ３１Ａ、階層部データバッファ３１Ｂ、及びデータバッファ３１Ｃの各データバッファ毎に、個別に、２次元Ｘ−Ｙ座標系を設定する。
【００８５】
このことにより、列見出し部データバッファ３１Ａは、同図（ａ）に示すように、１行のみからなるため、その左上隅の座標（Ｘ，Ｙ）のみを指定するだけで、その領域のサイズが決定される。右隅の座標は（表幅、Ｙ）となるからである。尚、Ｘ＝０、Ｙ＝０とする。
【００８６】
また、階層部データバッファ３１Ｂは、同図（ｂ）に示すように、その領域の左上隅の座標（ＸＳ，ＹＳ）と右下隅の座標（ＸＥ，ＹＥ）とで、初期表示部分が決定される。尚、ＸＳ＝０、ＹＳ＝０とする。この結果、ＸＥ＝表幅、ＹＥ＝行の高さ（行高）×ｎ（レベル数）である。また、データ行部データバッファ３１Ｃは、同図（ｃ）に示すように、その領域の左上隅の座標（ＤＸＳ，ＤＹＳ）と右下隅の座標（ＤＸＥ，ＤＹＥ）とで、初期表示部分が決定される。初期表示においては、ＤＸＳ＝０、ＤＹＳ＝０、ＤＸＥ＝表幅、ＤＹＥ＝表高−ＹＥとなる。尚、ＤＹＳ及びＤＹＥは、縦スクロール操作に応じて変化する。
【００８７】
再び、図６のフローチャートの説明に戻る。
ステップＳ４５の処理により、図９（ａ）に示す列見出し部データバッファ３１Ａの斜め縞の部分が、表示装置８０の画面に表示される。
【００８８】
ステップＳ４５の処理に続いて、階層部データバッファ３１Ｂに格納されている階層部の固定列部の画像（階層Ｌ画像）とスクロール列部の画像（階層Ｓ画像）を表示装置８０に書き出す（ステップＳ４６）。この処理の詳細は、後述する。
【００８９】
次に、データ行部データバッファ３１Ｃ内に格納されているデータ行部の画像データを表示装置８０に書き出し（ステップＳ４７）、終了する。このステップＳ４７の処理の詳細も、後述する。
【００９０】
以上の処理により、括り表の内、図９で斜め縞で示した部分が初期表示される。
図２３は、括り表の一例である「商品売上実績表」の初期表示状態を示す図である。同図において、固定列の見出し名として「商品」が表示されている。また、スクロール列を構成する列見出し名として、左から「売上金」、「売上数」、「仕入数」、「粗利」、「粗率」、及び「在庫数」が表示されている。また、「在庫月数」の一部である「在庫月」が表示されている。これらは、列見出し部データバッファ３１Ａに格納されているデータである。
【００９１】
また、階層部の固定列のデータとして、「電卓（階層レベル１）」、「ＤＩＡＲＹ（階層レベル２）」、「０１１２１２３  ＳＦ−４４００（階層レベル３）」が表示されている。これらは、階層部データバッファ３１Ｂに格納されているデータである。
【００９２】
さらに、階層部の階層レベル４以降のデータとして、「０１１２９９８  ＤＫ−Ｊ８５」、「０１１５０２６  ＪＤ−３６４」、・・・が表示されている。これらは、データ行部データバッファ３１Ｃに格納されているデータである。
【００９３】
また、上記のように表示された括り表の左下に、列名一覧表示１０１Ａが表示されている。この列名一覧表示１０１Ａにおいては、表示装置８０の画面に表示されている各列の見出し名「商品」、「売上金」、「売上数」、「仕入数」、「粗利」、「粗率」、「在庫数」と、一部しか表示されていない列並びに全く表示されていない各列の見出し名「在庫月数」、「当月」、「０８月」、「０７月」、「０６月」とが、異なる背景色と枠線で表示されている。
【００９４】
また、さらに、画面の最下端には、上行スクロールボタン１０３Ｕ、下行スクロールボタン１０３Ｄ、左列スクロールボタン１０５Ｌ、及び右列スクロールボタン１０５Ｒが配置されている。これらのスクロールボタンを、入力装置９０のマウス等により、クリックすることにより、表に表示される階層レベルが“３”の項目を１項目づつスクロールすることが可能となると共に、表の各列を１列づつ左右にスクロールすることが可能になる。。
【００９５】
すなわち、上行スクロールボタン１０３Ｕをクリックすることにより、表に表示される階層レベルが“３”の項目が上方向に１列移動する（上行スクロール）。また、下行スクロールボタン１０３Ｄをクリックすることにより、表に表示される階層レベルが“３”の項目が下方向に１列移動する（下行スクロール）。また、さらに、左列スクロールボタン１０５Ｌをクリックすることにより、表に表示される列が左方向に１列移動する（左列スクロール）。また、さらに、右列スクロールボタン１０５Ｒをクリックすることにより、表に表示される列が右方向に１列移動する（右列スクロール）。
【００９６】
これらのクリック操作は、スクロール制御部１００によって検出され、各スクロールボタンに対応するイベントとして、スクロール制御部１００から表データ表示制御部７０に通知される。尚、上行スクロールボタン１０３Ｕ及び下行スクロールボタン１０３Ｄをクリックすることによって発生するイベントを、それぞれ、上行表示クリックイベント及び下行表示クリックイベントと呼ぶ。また、左列スクロールボタン１０５Ｌ及び右列スクロールボタン１０５Ｒをクリックすることによって発生するイベントを、それぞれ、左列表示クリックイベント及び右列表示クリックイベントと呼ぶ。
【００９７】
図７は、図６のフローチャートのステップＳ４６及びステップＳ４７の処理の詳細を示すフローチャートである。同図において、ステップＳ５１〜Ｓ５６が、ステップＳ４６の詳細フローであり、ステップＳ５７〜Ｓ７１がステップＳ４７の詳細フローである。
【００９８】
同図において、まず、階層部データバッファ３１Ｂ上の表示範囲を設定する（ステップＳ５１）。この処理は、図７（ｂ）に示す階層部データバッファ３１Ｂの左上隅の座標（ＸＳ，ＹＳ）及び右下隅の座標（ＸＥ，ＹＥ）を設定する処理である。この結果、上記のように、ＸＳ＝０、ＹＳ＝０、ＸＥ＝表幅、ＹＥ＝行の高さ（行高）×ｎ（レベル数）と設定される。
【００９９】
次に、階層部データバッファ管理テーブル３１Ｄの行を示す変数ｉを“１”に設定する（ステップＳ５２）。続いて、階層部データバッファ管理テーブル３１Ｄのｉ行目の「行高さ」フィールドの値を読みだし（ステップＳ５３）、該「行高さ」フィールドの値を判断する（ステップＳ５４）。そして、該値が“１／２Ｈ”であればステップＳ５５へ、“Ｈ”であればステップＳ５６へ、“０”であればステップＳ５７へ進む。
【０１００】
ステップＳ５５では、階層部データバッファ３１Ｂのｉ行目に対応する隙間データを隙間データバッファ３２から読みだして、表示装置８０に書き出す。続いて、ｉ行目に対応する階層部Ｌ、Ｓデータを、ステップＳ５４で読みだした「行高さ」フィールドの行高で、表示装置８０に書き出す（ステップＳ５６）。そして、ｉの値を１だけインクリメントする（ステップＳ５７）。
【０１０１】
次に、ｉ＞６であるか判別し（ステップＳ５８）、ｉ＞６でなければ、ステップＳ５３に戻る。
このようにして、階層部データバッファ管理テーブル３１Ｄの１行目から順に、「行高さ」フィールドの値を読みだして、その値に応じて、表の階層部の表示行のデータを表示装置８０に書き出す。そして、階層部データバッファ管理テーブル３１Ｄの全ての行の「行高さ」フィールドの値を読みだしたと判別すれば、（ステップＳ５８、ＹＥＳ）、ステップＳ５９へ進む。
【０１０２】
後述するように、表示装置８０に表示される階層部の行数は、縦スクロールに応じて変化する。換言すれば、階層部データバッファ管理テーブル３１Ｄの各行の「行高さ」フィールドの内容に応じて変化する。「行高さ」フィールドの値が“１／２Ｈ”である行においては、上半分に隙間データが下半分に該当する行データの下半分が表示される（ステップＳ５５、Ｓ５６）。また、「行高さ」フィールドの値が“Ｈ”である行においては、該当する行データの全体が表示される（ステップＳ５６）。また、「行高さ」フィールドの値が“０”である行においては、表示がなされない。尚、上述した行は、階層部データバッファ３１Ｂの行を指しており、表示装置８０に表示される階層部の行のことではない。
【０１０３】
後述する説明から明らかになるように、ステップＳ５３〜Ｓ５８のループ処理において、ステップＳ５６の処理の実行回数によって、表示装置８０の画面に表示される階層部の行数は変化する。すなわち、該行数は、該実行回数に等しい。
【０１０４】
階層部データバッファ管理テーブル３１Ｄは、表の初期画面表示の際には、図８（ｂ）の左側に示すようになっている。すなわち、階層部データバッファ管理テーブル３１Ｄの奇数行の「行高さ」フィールドは“０”、偶数行の「行高さ」フィールドは“Ｈ”となっている。したがって、表の初期表示画面においては、表の階層部は３行表示されることになる。このため、該階層部の１、２、３行目には、それぞれ、表データテーブル１１ａの１行目から３行目までの行データの全体が表示される。すなわち、図１３の例に示すように、階層レベルが“１”の行（「Ａ  電卓  ・・・・」、“２”の行（「Ａ２  ＤＩＡＲＹ  ・・・」）及び“３”の先頭行（「０１１２１２３  ＳＦ−４４００」）が完全に表示される。
【０１０５】
一方、縦スクロールが行われ、例えば、「電卓」の階層レベル“２”の項目である「ＤＩＡＲＹ」に属する階層レベル“３”の全ての項目の行データが画面から消え、表の階層部の最下位行に「電卓」の次の階層レベル“２”の項目に属す階層レベル“３”の先頭項目の行データが表示される場合には、ステップＳ５４で“１／２Ｈ”と判別され、ステップＳ５５で横隙間データの表示がなされ、ステップＳ５６で「ＤＩＡＲＹ」の行データの下半分が表示される。このような、表示処理の詳細は、後述する。
【０１０６】
次に、列番号インデックスＰ（不図示）に“１”を設定すると共に、ＳＵＭ列幅に“０”を設定する（ステップＳ５９）。該列番号インデックスＰは、表属性情報テーブル１３の列幅の行の「列１」〜「列ｎ」の各フィールドを指す、インデックス情報であり、本実施形態では、上記表属性情報テーブル１３の列幅の行を、列幅（ｎ）の配列で表現する。これにより、「列１」の列幅は列幅（１）で、「列ｉ」の列幅は列幅（ｉ）で読みだすことができる（１≦ｉ≦ｎ）。また、ＳＵＭ列幅は、初期表示可能な列名を検索するために使用される変数である。ステップＳ５９に続いて、ＳＵＭ列幅の値に列幅（Ｐ）の値を加えた値を、ＳＵＭ列幅に代入する（ステップＳ６０）。この場合、最初は、ＳＵＭ列幅＝列幅（１）となる。
【０１０７】
次に、「ＳＵＭ列幅＞表幅」が成立するか判断し（ステップＳ６１）、成立しなければ（ステップＳ６１、ＮＯ）、Ｐの値を“１”インクリメントし（ステップＳ６２）、再び、ステップＳ６０に戻る。このようにして、Ｐの値を１つづつインクリメントしながら、ステップＳ６１で、「ＳＵＭ列幅＞表幅」が成立すると判断されるまで（ステップＳ６１、ＹＥＳ）、ステップＳ６０〜Ｓ６２の処理を繰り返す。
【０１０８】
ステップＳ６１で上記条件が成立すると判断すると（ステップＳ６１、ＹＥＳ）、Ｐの値を“１”デクリメントすると共に、列番号を示す変数ｋに“１”を設定し、（ステップＳ６３）、ステップＳ６４に移る。ステップＳ６４では、表データ属性情報テーブル１５ａの列番号ｋの列の列表示状態フラグの中で、“０”以外のフラグを“１”に設定する。
【０１０９】
次に、列番号ｋ＝Ｐであるか判断し（ステップＳ６５）、ｋ＝Ｐでなければ（ステップＳ６５、ＮＯ）、ｋの値を“１”インクリメントし（ステップＳ６６）、ステップＳ６４に戻る。ステップＳ６４〜Ｓ６６の処理は、ステップＳ６５で、ｋ＝Ｐであると判断されるまで繰り返される。
【０１１０】
このようにして、列番号ｋの値を“１”から“Ｐ”まで、１つづつインクリメントしていきながら、表データ属性情報テーブル１５ａの列表示状態フラグの中で、“０”以外の列番号ｋのフラグを“１”に設定する。尚、列表示状態フラグが“０”の列は固定列であるため、変更しない。以上の処理により、スクロール列に属する列の中で、初期表示される列の列表示状態フラグが“１”（表示列）に設定される。
【０１１１】
ステップＳ６５でｋ＝Ｐであると判断されると（ステップＳ６５、ＹＥＳ）、表データ属性情報テーブル１５ａの列状態フラグの中で、列番号がＰを越えるフラグを“２”に設定する（ステップＳ６７）。
【０１１２】
この結果、スクロール列に属する列の中で、初期表示されない列の列表示状態フラグが“２”（非表示列）に設定される。
次に、データ行部データバッファ３１Ｃ内の表示対象矩形領域を設定する。すなわち、図９に示すように、該表示対象矩形領域の左上隅の座標（ＤＸＳ，ＤＹＳ）を（０、ａ）に、右下隅の座標（ＤＸＥ，ＤＹＥ）を（表幅、ｂ）に設定する（ステップＳ６８）。ここで、
ａ＝（表示先頭行カウンタの値−レベル数）×行高さ
ｂ＝ａ＋（表高−ＹＥ）
ＹＥ＝行の高さ×レベル数
である。
【０１１３】
続いて、ステップＳ６８で設定された、データ行部データバッファ３１Ｃ内の、左上隅の座標を（ＤＸＳ，ＤＹＳ）、右下隅の座標を（ＤＸＥ，ＤＹＥ）とする矩形領域を、表示装置８０に書き出し（ステップＳ６９）、処理を終了する。
【０１１４】
これにより、表示装置８０の画面に括り表のデータ行部の初期画像が表示される。
次に、図１０のフローチャートを参照しながら、括り表の表示中に、その下方に表示される列名一覧表示の処理を説明する。
【０１１５】
まず、列幅情報テーブル４３を生成する（ステップＳ８１）。この処理は、図５（ａ）に示すように、表データ属性情報テーブル１５ａの列幅の行を参照して、括り表の各列ｉ（１≦ｉ≦ｎ）の列幅Ｗｉを、列幅情報テーブル４３の当該フィールドに設定すると共に、表データ表示制御部７０内の列名表座標情報７３を参照して、各列ｉの始点座標Ｘｉを設定する処理である。
【０１１６】
続いて、各列ｉの列幅Ｗｉを累算して、それらの合計値を、変数「幅合計」に代入する（ステップＳ８２）。次に、「幅合計＞表幅」であるか判断する（ステップＳ８３）。そして、幅合計が表幅より大きければ（ステップＳ８３、ＹＥＳ）、列幅情報テーブル４３を検索して、最大幅のＷｊ（１≦ｊ≦ｎ）を見つけ出し、該Ｗｊの値を１だけ減少させ（ステップＳ８４）、ステップＳ８２に戻り、ステップＳ８２で新たな幅合計を算出する。そして、再び、「幅合計＞表幅」であるか判断する（ステップＳ８３）。
【０１１７】
このようにして、ステップＳ８３で、幅合計が表幅以下となるまで、ステップＳ８２〜Ｓ８４の処理を繰り返す。そして、ステップＳ８３で、幅合計が表幅より大きくないと判断されると（ステップＳ８３、ＮＯ）、変数ＣＬに、現在、表示装置８０の画面に表示されている左端の列の番号を代入すると共に、変数ＣＲに、表示装置８０の画面に表示されている右端の列の番号を代入する（ステップＳ８５）。
【０１１８】
続いて、列幅情報テーブル４３内の各列ｉの始点座標Ｘｉと列幅Ｗｉを参照して、図５（ｂ）に示すように、列名一覧データバッファ６０に、各列ｉの見出し名を書き込む（ステップＳ８６）。
【０１１９】
次に、列幅情報テーブル４３の各列ｉのフィールドのインデックス番号を示す変数ＴＢＬ＿ＩＤＸに、初期値“１”を設定する（ステップＳ８７）。
続いて、該変数ＴＢＬ＿ＩＤＸの値が、括り表の列数よりも大きいか、すなわち、ＴＢＬ＿ＩＤＸ＞列数であるか判断する（ステップＳ８８）。
【０１２０】
そして、ＴＢＬ＿ＩＤＸ＞列数でなければ（ステップＳ８８、ＮＯ）、ＣＬ≦ＴＢＬ＿ＩＤＸで、かつ、ＴＢＬ＿ＩＤＸ≧ＣＲであるか判断する（ステップＳ８９）。この判断処理は、ＴＢＬ＿ＩＤＸが、現在、表示装置８０の画面に表示されている列のインデックス番号であるかを判断する処理である。
【０１２１】
ステップＳ８９で、上記２つの不等式が共に成立すると判断すれば（ステップＳ８９、ＹＥＳ）、該ＴＢＬ＿ＩＤＸが示す列（表示列）の枠線及び背景色を、列名一覧データバッファ６０にセットする（ステップＳ９０）。
【０１２２】
一方、ステップＳ８９で、上記２つの不等式が共に成立しないと判断すれば（ステップＳ８９、ＮＯ）、該ＴＢＬ＿ＩＤＸが示す列（非表示列）の枠線及び背景色を、列名一覧データバッファ６０にセットする（ステップＳ９１）。
【０１２３】
ステップＳ９０またはステップＳ９１の処理が終了した後、ＴＢＬ＿ＩＤＸの値を１つインクリメントして（ステップＳ９２）、ステップＳ８８に戻る。ステップＳ８８〜Ｓ９２の処理は、ステップＳ８８で、ＴＢＬ＿ＩＤＸの値が括り表の列数よりも大きいと判断されるまで（ステップＳ８８、ＹＥＳ）、繰り返される。
【０１２４】
以上のようにして、列名一覧データバッファ６０に、括り表の全ての列について、それらが、現在、表示中であるか否かに応じて、表示列または非表示列の枠線・背景色が設定される。
【０１２５】
ステップＳ８８でＹＥＳと判断されると、列名一覧データバッファ６０の内容を基に、表示装置８０に列名一覧表示データを書き出し（ステップＳ９３）、処理を終了する。
【０１２６】
この結果、表示装置８０の画面には、括り表の下方に、列名が一覧表示される。この列名一覧表示においては、画面に表示されている列の列名と表示されていない列の列名とが、互いに異なる枠線及び背景色で表示される。したがって、ユーザは、列名一覧表示を見るだけで、現在、表示されている列と表示されていない列とを、一目で認識できる。
【０１２７】
尚、本実施形態では、枠線と背景色の両方で、表示列の列名と非表示列の列名とを区別して表示しているようにしているが、枠線または背景色のいずれか一方のみで、区別して表示するようにしてもよい。また、表示列の列名を高輝度で、非表示列の列名を低輝度で表示するようにして、輝度の違いにより、上記２つの列が区別できるように表示するようにしてもよい。また、これら以外に、表示列の列名のみをフリッカ表示させることにより、表示列と非表示列とを区別できるようにしてもよい。つまり、列名一覧表示において、表示列と非表示列とが区別できるのであれば、いかなる表示形態であってもよい。
【０１２８】
次に、図１１のフローチャートを参照しながら、本実施形態において、横スクロール操作が行われた場合の処理を説明する。
まず、発生した表示クリックイベントが、表示される列を１列だけ右方向に移動させる（右列スクロールさせる）右列表示クリックイベントであるか、または表示される列を１列だけ左方向に移動させる（左列スクロールさせる）左列表示クリックイベントであるか判別する（ステップＳ１０１）。
【０１２９】
そして、右列スクロールボタン１０５Ｒが操作された右列表示クリックイベントであると判別すれば（ステップＳ１０１，ＹＥＳ）、フラグである縦隙間ＦＬＧ（不図示）を“ＯＦＦ”に設定する（ステップＳ１０２）。次に、表データ属性情報テーブル１５ａを検索して、“１”となっている最左列の列表示状態フラグを“２”に更新し、その最左列の右列の列番号を変数ＣＬに設定する（ステップＳ１０３）。続いて、縦隙間ＦＬＧを“ＯＮ”に設定し（ステップＳ１０４）、ステップＳ１０９に移る。
【０１３０】
このように、右列表示クリックイベントが発生すると、表データ属性情報テーブル１５ａにおける“１”（表示列）となっている最左列が１列右に移動し、縦隙間ＦＬＧが“ＯＮ”に設定される。
【０１３１】
一方、ステップＳ１０１で、左列スクロールボタン１０５Ｌが操作された左列表示クリックイベントであると判別すれば（ステップＳ１０１，ＮＯ）、縦隙間ＦＬＧを“ＯＦＦ”に設定する（ステップＳ１０５）。次に、表データ属性情報テーブル１５ａを検索して、“２”となっている最左列の列表示状態フラグを“１”に更新し、その最左列の列番号を変数ＣＬに設定する（ステップＳ１０６）。
【０１３２】
このように、左列表示クリックイベントが発生すれば、表データ属性情報テーブル１５ａにおける“１”（表示列）となっている最左列が１列右に移動し、縦隙間ＦＬＧが“ＯＮ”に設定される。
【０１３３】
次に、表データ属性情報テーブル１５ａを検索して、“０”の列表示状態フラグが存在するか判断する（ステップＳ１０７）。そして、“０”の列表示状態フラグが存在すれば（ステップＳ１０７、ＹＥＳ）、縦隙間ＦＬＧを“ＯＮ”に設定し（ステップＳ１０８）、ステップＳ１０９に移る。一方、ステップＳ１０７で、“０”の列表示状態フラグが存在しなければ（ステップＳ１０７、ＮＯ）、ステップＳ１０９に移る。尚、ステップＳ１０７の判別は、固定列（スクロールされない列）が無い表についても考慮したものである。このような表の場合には、ステップＳ１０７の判別は、常に、ＮＯとなる。
【０１３４】
ステップＳ１０９では、表データ属性情報テーブル１５ａを参照して、変数『列表示幅』に、列表示状態フラグが“０”である全ての列の列幅の総和を設定する。次に、変数ｉを“０”に初期設定する（ステップＳ１１０）。
【０１３５】
次に、変数『列表示幅』に列番号が（ＣＬ＋ｉ）である列の列幅を加算し、該加算結果を、変数『列表示幅』の新たな値とする（ステップＳ１１１）。
続いて、表幅＜変数『列表示幅』であるか判別し（ステップＳ１１２）、表幅が変数『列表示幅』以下であれば（ステップＳ１１２、ＮＯ）、変数ｉの値を１だけインクリメントし（ステップＳ１１３）、ステップＳ１１１に戻る。以上のようにして、変数ｉの値を１つづつインクリメントしながら、ステップＳ１１２で、変数『列表示幅』が表幅より大きいと判別されるまで（ステップＳ１１２、ＹＥＳ）、ステップＳ１１１〜Ｓ１１３の処理を繰り返す。
【０１３６】
そして、ステップＳ１１２で変数『列表示幅』が表幅より大きいと判別されると、表幅を超えた列番号（＝ＣＬ＋ｉ）より一つ小さい列番号を、変数ＣＲに設定する（ステップＳ１１４）。
【０１３７】
以上の処理は、表示装置８０の画面に表示される最右列の列番号を求める処理である。
次に、表データ属性情報テーブル１５ａにおいて、列番号がＣＬからＣＲまでの列の列状態フラグを“１”に設定する。また、列番号が（ＣＲ＋１）以降の列状態フラグを“２”に設定する（ステップＳ１１５）。
【０１３８】
続いて、上述した図１０のフローチャートに示す列名一覧表示処理を実行する（ステップＳ１１６）。
これにより、表示装置８０の画面に、上記形態で、括り表の列名の一覧が表示される。すなわち、括り表において、左列スクロールまたは右列スクロールの結果、新たに表示される列と新たに表示されなくなかった列の表示形態が変化する。
【０１３９】
次に、階層部のスクロール列部３１Ｆの表示データ領域を設定する。すなわち、階層部データバッファ３１Ｂのスクロール列部３１Ｆ内での表示装置８０に表示するスクロールデータ（Ｓデータ）の領域を設定する。このＳデータの左上隅の座標を（ＸＳ，ＹＳ）、右下隅の座標を（ＸＥ，ＹＥ）とする。そして、ＸＳに、｛隠れた（表示されなくなった）列の列幅−（縦隙間データの幅＋所定幅）｝の値を代入する。ここで、該所定幅は、隠れた最右列のデータの一部の表示域の幅である。ＹＳは変更しない。ＸＥには、（表幅バッファ−ＸＳ）の値を代入する。ＹＥは変更しない（ステップＳ１１７）。
【０１４０】
続いて、階層部データバッファ３１Ｂのスクロールデータ域において、ステップＳ１１７で設定された左上隅座標（ＸＳ，ＹＳ）、右上隅座標（ＸＥ，ＹＥ）で規定される矩形領域のデータ（Ｓデータ）を表示装置８０に書き出す（ステップＳ１１８）。
【０１４１】
次に、データ行部データバッファ３１Ｃの表示データ領域を設定する。すなわち、データ行部データバッファ３１Ｃのスクロール列部３１Ｆ内での表示装置８０に表示するスクロールデータの領域を設定する。このスクロールデータの左上隅の座標を（ＤＸＳ，ＤＹＳ）、右下隅の座標を（ＤＸＥ，ＤＹＥ）とする。そして、ＤＸＳに、ステップＳ１１７で決定されたＸＳの値を代入する。ＤＹＳは変更しない。ＤＸＥには、（表幅バッファ−ＸＳ）の値を代入する。ＤＹＥは変更しない（ステップＳ１１９）。
【０１４２】
続いて、データ行部データバッファ３１Ｃのスクロールデータ域において、ステップＳ１１９で設定された左上隅座標（ＤＸＳ，ＤＹＳ）、右上隅座標（ＤＸＥ，ＤＹＥ）で規定される矩形領域のデータを表示装置８０に書き出す（ステップＳ１２０）。
【０１４３】
次に、縦隙間ＦＬＧが“ＯＮ”であるか判別し（ステップＳ１２１）、“ＯＮ”であれば（ステップＳ１２１、ＹＥＳ）、縦隙間データ領域を設定する。すなわち、表示装置８０の画面に表示する縦隙間データの該画面上での左上隅の座標（Ｘ，Ｙ）を設定する。このとき、Ｘには、固定列の幅の総和（固定列部３１Ｅの幅）を設定する。Ｙには“０”を設定する（ステップＳ１２２）。
【０１４４】
そして、表示装置８０に、左上隅の座標として、ステップＳ１２２で設定された（Ｘ，Ｙ）を指定して、縦隙間データを表示装置８０に書き出し（ステップＳ１２３）、処理を終了する。
【０１４５】
ステップＳ１１８、ステップＳ１２０、及びステップＳ１２３の処理により、表示装置８０の画面上で、横スクロール操作に応じて、スクロール領域のデータがスクロールすると共に、固定列部とスクロール列部との間に縦隙間データが表示される。また、スクロールによって固定列部に隠された列の一部が表示される。この表示の例を、図２４及び図２５に示す。
【０１４６】
図２４は、図２３の初期表示画面において、右列スクロールを行った場合の表示例であり、「売上金」の列が右端の一部を除いて、隠れて表示されている。そして、固定列部１１３とスクロール列部１１５との間に縦隙間データ（空白）が表示されている。また、右列スクロールを行った結果、「在庫月数」が全て表示されるようになると共に、新たに「当月」が表示され、また、「０８月」の一部も表示されている。これに伴い、列名一覧表示１０１Ｂにおいては、「売上金」が非表示列の表示形態に変化すると共に、「在庫月数」及び「当月」が表示列の表示形態に変化している。
【０１４７】
また、図２５は、図２４の状態において、更に、左スクローを行い、商品売上実績表の右端まで表示させた状態を示している。この場合、図２４おいて表示されていた「売上数」の列が表示されなくなり、「仕入数」の列が右端の一部を除いて、隠れて表示されている。そして、図２５と同様に、固定列部１１３とスクロール列部１１５との間に縦隙間データ（空白）が表示されている。この結果、列名一覧表示１０１Ｃにおいては、「売上金」に加え、更に、「売上数」及び「仕入数」が非表示列の表示形態に変化している。また、図２４においては、非表示列の表示形態で表示されていた「在庫月数」、「当月」「０８月」、「０７月」、及び「０６月」が、表示列の表示形態に変化している。
【０１４８】
このように、本実施形態では、表示装置８０の画面に表示されている列と表示されていない列（右端の一部のみが表示される列も含む）とが、異なる形態で表示される。また、固定列部３１Ｅの裏に隠れて見えなくなった列が存在する場合には、固定列部３１Ｅとスクロール列部３１Ｆとの間に縦の隙間が表示されると共に、該隠れている最右端の列（直前に隠された列）の右端の一部が、上記縦隙間の右隣に表示される。したがって、ユーザは、固定列部３１Ｅによって隠されている列が存在することを、視覚的に、即座に、理解できると共に、該隠されている列の列名も、直ちに、知ることができる。
【０１４９】
次に、縦スクロール操作が行われたときの本実施形態の動作を説明する。図１２は、下行表示用の縦スクロール（下行スクロール）のための下行スクロールボタン１０３Ｄのクリック操作が１回行われる毎に、実行される処理を説明するフローチャートである。
【０１５０】
以下、動作の理解を容易にするために、図２の表データテーブル１１ａが図１３（ａ）に示す内容となっている場合を例にして、説明する。図１３（ａ）に示す表データテーブル１１ａの各行の左に添えられている「１」から始まる連番の数字は行番号を示している。同図（ａ）に示す表データテーブル１１ａにおいては、階層レベル“１”のデータとして、「電卓」（行番号１の行データ）と「時計」（行番号３３の行データ）がある。また、「電卓」の下位の階層レベル“２”のデータとして、「ＤＩＡＲＹ」（行番号２の行データ）及び「関数」（行番号２９の行データ）。そして、「ＤＩＡＲＹ」の下位の階層レベル“３”のデータとして、行番号３〜２８の行データがある（「商品Ａａ」、「商品Ａｂ」、・・・・「商品Ａｚ」）。また、「関数」の下位の階層レベル“３”のデータとして、行番号３０〜３２の行データがある（「商品Ｅｘ」、「商品Ｅｙ」、「商品Ｅｚ」）。
【０１５１】
また、「時計」の下位の階層レベル“２”のデータとして、「デジタル」（行番号３４の行データ）がある。そして、「デジタル」の下位の階層レベル“３”のデータとして、行番号３５〜４０の行データがある（「商品Ｂａ」、「商品Ｂｂ」、・・・・「商品Ｂｆ」）。
【０１５２】
同図（ｂ）は、同図（ａ）に示す表データテーブル１１ａの初期表示画面の左上部を示す図である。同図（ｂ）に示すように、階層レベル“３”の行データは、表の第４行目以降に表示される。同図（ａ）に示す現在表示先頭行カウンタ１１１は、表示装置８０の画面に表示されている表の行データの中で、下行表示のクリック操作に応じてスクロールされる行データの行番号が格納されるカウンタである。
【０１５３】
図１２のフローチャートの説明を始める。
まず、変数ＷＫ−ＴＯＰに、現在表示先頭行カウンタの値を代入する（ステップＳ１３１）。該現在表示先頭行カウンタは、下行表示または、後述する上行表示の縦スクロール操作が行われた場合において、表示装置８０の画面に表示される表の階層部の最下位行に表示される階層レベルが“３”の行データの行番号を格納するカウンタである。尚、該行データは、該表において、全体が表示される先頭の行データである。
【０１５４】
次に、ＷＫ−ＴＯＰに１を加えた値が、表データ属性情報テーブル１５ａの表行数よりも大きいか判別する（ステップＳ１３２）。大きい場合には（ステップＳ１３２、ＹＥＳ）、もはや、下行スクロールすべき行データが存在しないので、スクロール不要とし、処理を終了する。
【０１５５】
一方、大きくない場合には（ステップＳ１３２、ＮＯ）、フラグである上位レベル変更ＦＬＧを“ＯＦＦ”に設定する（ステップＳ１３３）。この上位レベル変更ＦＬＧは、本フローチャートにおいては、無条件に横隙間表示を不要とするか否かを決定する切替えフラグであり、ＯＦＦの場合には、横隙間表示が不要であることを示す。この上位レベル変更ＦＬＧは、図１２のフローチャートの処理が、一回の下行表示のクリックが繰り返される毎に、毎回、“ＯＦＦ”にリセットされる。
【０１５６】
続いて、現在表示先頭行カウンタ１１１の値を１だけインクリメントし（ステップＳ１３４）、現在表示先頭行カウンタ１の指す行の階層レベルを表データテーブル１１ａを参照して調べ、該階層レベルを変数ｉｄｘに代入する（ステップＳ１３５）。現在表示先頭行カウンタ１１１の値は、初期表示状態の際に、図６のフローチャートのステップＳ４４において“３”に初期設定される。したがって、図１３（ｂ）に示す表の初期表示画面においては、現在表示先頭行カウンタ１１１の値は“３”に設定されている。よって、ステップＳ１３４の最初の処理において、現在表示先頭行カウンタ１１１の値は“４”に設定される。
【０１５７】
次に、変数Ｌ−ｉｄｘに、ｉｄｘ＋（ｉｄｘ−１）の値を代入する（ステップＳ１３６）。Ｌ−ｉｄｘは、図８（ｂ）の階層部データバッファ３１Ｂから、第ｉ行のＬバッファ（ｉ）を読みだすためのインデックスを格納する変数であり、該ｉの値（ｉ＝１〜６）が設定される。この場合、Ｌ−ｉｄｘの値は“５”となる。
【０１５８】
続いて、変数Ｌｅｖ１に、現在表示先頭行カウンタ１１１の設定されている行番号の行データの階層レベルを設定すると共に、変数Ｌｅｖ２に、該行番号より一つ手前の行番号の行データの階層レベルを設定する（ステップＳ１３７）。
【０１５９】
この結果、Ｌｅｖ１及びＬｅｖ２の値が、共に、“３”に設定される。今までの処理結果を、図１４（ａ）に示す。尚、図１４（ａ）の右側に示す階層部データバッファ３１Ｂは、あくまでも、模式図であり、Ｌバッファ（１）、Ｌバッファ（２）、Ｌバッファ（３）、Ｌバッファ（４）、Ｌバッファ（５）、及びＬバッファ（６）を、便宜上、それぞれ、その先頭アドレスを指すポインタＬ１−１、Ｌ１−２、Ｌ２−１、Ｌ２−２、Ｌ３−１、Ｌ３−２で示している。また、実際には、階層部データバッファ管理テーブル３１Ｄの「行高さ」フィールドに設定される行高さ情報を、あたかも、階層部データバッファ３１Ｂに格納されるように示しているが、これは、動作説明を理解しやすくためである。後述する、図１５（ａ）等の、図１４（ａ）と同様な図面においても、同様な形式で図示している。
【０１６０】
次に、上位レベル変更ＦＬＧが“ＯＦＦ”であるか判別し（ステップＳ１３８）、“ＯＦＦ”であれば（ステップＳ１３８、ＹＥＳ）、ステップＳ１３９に移る。現時点では、上位レベル変更ＦＬＧは“ＯＦＦ”であるので、ステップＳ１３９に移る。
【０１６１】
続いて、Ｌｅｖ１＜Ｌｅｖ２であるか判別する（ステップＳ１３９）。この判別は、下スクロールにより、新たに、表の第４行目に表示される行データが、別階層に属する行データに変化するかを判別する処理であり、現在表示先頭行カウンタ１１１に格納される行番号の行データに着目すれば、下スクロール操作前の該行データが属する階層レベルが変化することに該当する。すなわち、例えば、図１３（ａ）に示す例では、該行番号が“２８”から“２９”に変化する場合（階層レベルが、“３”から“２”に変化）、該行番号が“３２”から“３３”に変化する場合（階層レベルが、“３”から“１”に変化）に該当する。
【０１６２】
ステップＳ１３９で、Ｌｅｖ１＜Ｌｅｖ２であれば（ステップＳ１３９、ＹＥＳ）、上位レベル変更ＦＬＧを“ＯＮ”に設定し（ステップＳ１４０）、Ｌバッファ（Ｌ−ｉｄｘ）にＬバッファ（Ｌ−ｉｄｘ＋１）の内容をコピーする（ステップＳ１４１）。一方、ステップＳ１３９で、Ｌｅｖ１＜Ｌｅｖ２でなければ（ステップＳ１３９、ＮＯ）、ステップＳ１４１に移り、Ｌバッファ（Ｌ−ｉｄｘ）にＬバッファ（Ｌ−ｉｄｘ＋１）の内容をコピーする。
【０１６３】
この場合、Ｌｅｖ１＝３、Ｌｅｖ２＝３なので、ステップＳ１３９でＮＯと判別され、ステップＳ１４０の処理は行わず、ステップＳ１４１の処理を行う。この結果、図１４（ａ）に示すように、Ｌバッファ（６）に格納されている「商品Ａａ」の行データがＬバッファ（５）に格納され、Ｌバッファの内容が“ＮＵＬＬ”から「商品Ａａ」の行データに変化する。
【０１６４】
続いて、Ｌバッファ（Ｌ−ｉｄｘ＋１）に、現在表示先頭行カウンタ１１１に格納されている行番号のデータ（現在先頭表示行データ）をコピーする（ステップＳ１４２）。この結果、図１４（ａ）に示すように、現在表示先頭行カウンタ１１１に格納されている行番号（＝４）の「商品Ａｂ」の行データがＬバッファ（６）に格納される。
【０１６５】
次に、Ｄバッファ（Ｌ−ｉｄｘ）の「行番号」フィールドに、階層部データバッファ３１Ｂの（Ｌ−ｉｄｘ）に格納されている行データの行番号を格納すると共に、「行高さ」フィールドに、行高さ／２（＝Ｈ／２）を格納する（ステップＳ１４３）。
【０１６６】
この結果、階層部データバッファ管理テーブル３１Ｄの第５行の「行番号」フィールド及び「行高さ」フィールドに、それぞれ、“３”、“Ｈ／２”が格納される。
【０１６７】
続いて、Ｄバッファ（Ｌ−ｉｄｘ＋１）の「行番号」フィールドに、階層部データバッファ３１Ｂの（Ｌ−ｉｄｘ＋１）に格納されている行データの行番号（現在表示先頭行カウンタ１１１の値）を格納すると共に、「行高さ」フィールドに、行高さ（＝Ｈ）を格納する（ステップＳ１４４）。
【０１６８】
この結果、階層部データバッファ管理テーブル３１Ｄの第５行の「行番号」フィールド及び「行高さ」フィールドに、それぞれ、“４”、“Ｈ”が格納される。
【０１６９】
次に、ｉｄｘの値を１つインクリメントし（ステップＳ１４９）、該ｉｄｘの値が、表属性情報テーブル１３の階層レベル数より大きいか判別する（ステップＳ１５０）。本実施形態の場合、階層レベル数が“３”であり、現時点のｉｄｘの値が“４”であるので、ステップＳ１４９でＹＥＳと判別され、前記階層Ｌ画像、前記階層Ｓ画像を表示装置８０に書き出し（ステップＳ１５１）、データ行部データバッファ３１Ｃの当該データを表示装置８０に書き出し（ステップＳ１５２）、処理を終了する。ステップＳ１５１とステップＳ１５２の処理は、上述した図７のフローチャートに示す処理である。これらの処理により、表示装置８０の画面には、下スクロール後の表が表示される。
【０１７０】
この結果、表示装置８０の画面に表示される表の階層部とデータ行部は、図１３（ｂ）に示す状態から図１４（ｂ）に示す状態に変化する。すなわち、「商品Ａａ」の行データが上にスクロールされ、その下半分のデータのみが表示されると共に、該下半分のデータと「ＤＩＡＲＹ」の行データとの間に、横隙間データＣ３（隙間データバッファ３２のポインタＣ３で指されるアドレスに格納されている横隙間データ）が表示される。したがって、ユーザは、「ＤＩＡＲＹ」に属する項目として、「商品Ａｂ」の前に、他の項目が存在することを、視覚的に、容易かつ即時に、認識することができる。
【０１７１】
以後、下行表示クリックイベントが発生する毎に、図１２のフローチャートの処理が実行され、上述した処理が、現在表示先頭行カウンタ１１１の値が“２８”になるまで実行され、図１４（ｂ）に示すような形態で、行番号が“４”〜“２８”までの行データが表示される。
【０１７２】
次に、現在表示先頭行カウンタ１１１が“２８”になっているとき、すなわち、「ＤＩＡＲＹ」に属する「商品Ａｚ」が階層部の最終行（Ｌ３）に表示されているときに、下行クリック操作が行われた場合の、図１２のフローチャートの処理を、図１５を参照しながら説明する。
【０１７３】
この場合、ステップＳ１３１でＷＫ−ＴＯＰの値が“２８”に設定され、ステップＳ１３２で（ＷＫ−ＴＯＰ＋１）の値が表データ属性情報テーブル１５ａの表行数よりも小さいと判別され、ステップＳ１３３で上位レベル変更ＦＬＧが“ＯＦＦ”に設定される。
【０１７４】
続いて、現在表示先頭行カウンタ１１１の値が“２９”に更新され、ｉｄｘに“２”が設定される。そして、ステップＳ１３４で現在表示先頭行カウンタ１１１の値が“２９”に設定され、ステップＳ１３５でｉｄｘの値が“２”に設定される。続いて、ステップＳ１３６で、Ｌ−ｉｄｘの値が“３”に設定され、ステップＳ１３７で、Ｌｅｖ１に“２”が、Ｌｅｖ２に“３”が設定される。
【０１７５】
この結果、ｉｄｘ、Ｌ−ｉｄｘ、Ｌｅｖ１、及びＬｅｖ２の値は、図１５（ａ）に示すようになる。
次に、ステップＳ１３８では、上位レベル変更ＦＬＧが“ＯＦＦ”なるので、ＮＯと判別され、ステップＳ１３９に移る、ステップＳ１３９では、Ｌｅｖ１＝２、Ｌｅｖ２＝３となっているので、ステップＳ１３９でＹＥＳと判別され、上位レベル変更ＦＬＧを“ＯＮ”に設定する（ステップＳ１４０）。
【０１７６】
続いて、ステップＳ１４１で、Ｌバッファ（３）にＬバッファ（４）の内容がコピーされる。この結果、図１５（ａ）に示すように、Ｌバッファ（３）の内容は、“ＮＵＬＬ”から「ＤＩＡＲＹ」の行データに書き換えられる。
【０１７７】
次に、ステップＳ１４２で、現在表示先頭行カウンタ１１１に設定されている行番号（＝２９）の行データが、Ｌバッファ（４）にコピーされる。この結果、図１５（ａ）に示すように、Ｌバッファ（４）の内容は、「ＤＩＡＲＹ」の行データから「関数」の行データに書き換えられる。
【０１７８】
続いて、ステップＳ１４３で、Ｄバッファ（３）の「行番号」フィールドと「行高さフィールド」に、それぞれ、“２”と“１／２Ｈ”が設定され、ステップＳ１４４で、Ｄバッファ（４）の「行番号」フィールドと「行高さフィールド」に、それぞれ、“２９”と“Ｈ”が設定される。
【０１７９】
次に、ステップＳ１４５で、ｉｄｘの値が“３”に設定される。この結果、ｉｄｘ＝階層レベル数となるので、ステップＳ１５０の判別はＮＯとなり、ステップＳ１３４に戻る。そして、ステップＳ１３４で、現在表示先頭行カウンタ１１１の値が“３０”に設定される。以後、ステップＳ１３６〜Ｓ１３７の処理が行われ、Ｌ−ｉｄｘが“５”、Ｌｅｖ１とＬｅｖ２が、共に、“３”に設定される。
【０１８０】
そして、次のステップＳ１３８で、上位レベル変更ＦＬＧが“ＯＦＦ”でないと判別され、Ｌバッファ（Ｌ−ｉｄｘ）の内容を消去する（ステップＳ１４５）。この結果、図１５（ａ）に示すように、Ｌ（５）の内容が「商品Ａｙ」の行データから“ＮＵＬＬ”になる。
【０１８１】
続いて、Ｌバッファ（Ｌ−ｉｄｘ＋１）に、現在表示先頭行カウンタ１１１に格納されている行番号の行データをコピーする（ステップＳ１４６）。この結果、図１５（ａ）に示すように、Ｌバッファ（６）に行番号が“３０”の「商品Ｅｘ」の行データが格納される。
【０１８２】
次に、Ｄバッファ（Ｌ−ｉｄｘ）の「行番号」フィールドを“−”にすると共に、Ｄバッファの「行高さ」フィールドに“０”を設定する（ステップＳ１４７）。続いて、Ｄバッファ（Ｌ−ｉｄｘ＋１）の「行番号」フィールドに、階層部データバッファ３１ＢのＬバッファ（Ｌ−ｉｄｘ＋１）に格納されている行データの行番号（現在表示先頭行カウンタ１１１の値）を設定すると共に、Ｄバッファ（Ｌ−ｉｄｘ＋１）の「行高さ」フィールドに“行高さ”（＝Ｈ）を設定する（ステップＳ１４８）。
【０１８３】
続いて、ステップＳ１４９でｉｄｘを“４”に増加させ、ステップＳ１５０で、ｉｄｘ＞階層レベル数であると判別し、ステップＳ１５１、Ｓ１５２を行い、処理を終了する。この結果、表示装置８０の画面には、図１５（ｂ）に示す形態で、表の階層部及びデータ行部の上位行が表示される。
【０１８４】
すなわち、この場合、階層レベル“１”の「電卓」に関する第１の階層レベル“２”の「ＤＩＡＲＹ」に属する最終データ「商品Ａｚ」が階層レベル“３”の先頭データとして完全に表示されている状態で、下表示のクリック操作が行われたことにより、「ＤＩＡＲＹ」に属するデータの表示が画面上から消えるが、「ＤＩＡＲＹ」の下半分の行データは表示され、該行データと「電卓」の行データとの間に、階層レベル２に対応する横隙間データＣ２（隙間データバッファ３２のポインタＣ２の指すアドレスに格納されている隙間データ）が表示される。
【０１８５】
また、新たに、「関数」の行データが階層レベル“２”の行データとして表示され、その表示行に続いて、「関数」に属する階層レベル“３”のデータが先頭から表示される。
【０１８６】
このとき、表には、「電卓」の行データと「関数」の行データの間に、隙間を空けて、「ＤＩＡＲＹ」の下半分の行データが表示されるので、ユーザは、階層レベル“１”の「電卓」について、階層レベル“２”の項目として、「関数」の前に、別の項目が存在することを、視覚的に、即座かつ容易に、認識することができる。
【０１８７】
続いて、下行表示のクリック操作が行われると、再び、図１２のフローチャートの処理が実行される。このとき、現在表示先頭行カウンタ１１１の値は“３０”になっている。したがって、ステップＳ１３１〜Ｓ１３３の処理が実行されて、ステップＳ１３３で上位レベル変更ＦＬＧが“ＯＦＦ”に設定される。そして、ステップＳ１３４で、現在表示先頭行カウンタ１１１の値が“３１”に設定される。
【０１８８】
次に、ステップＳ１３５で、ｉｄｘの値が“３”に設定され、ステップＳ１３６でＬ−ｉｄｘの値が“５”に設定される。そして、ステップＳ１３７で、Ｌｅｖ１とＬｅｖ２に、共に、“３”に設定される。続いて、ステップＳ１３８で、上位レベル変更ＦＬＧが“ＯＦＦ”であると判別され、ステップＳ１３９で、Ｌｅｖ１＜Ｌｅｖ２でないと判別され、ステップＳ１４１〜ステップＳ１４４の処理が実行される。
【０１８９】
このステップＳ１４１〜Ｓ１４４の処理の場合、Ｌ−ｉｄｘの値は“５”であるので、Ｌバッファ（５）にＬバッファ（６）の内容（「商品Ｅｘ」の行データ）がコピーされ（ステップＳ１４１）、Ｌバッファ（６）に行番号が“３１”の行データである「商品Ｅｙ」の行データがコピーされる（ステップＳ１４２）。次に、Ｄバッファ（５）の「行番号」フィールドと「行高さ」フィールドに、それぞれ、“３０”と“Ｈ／２”が設定され（ステップＳ１４３）、続いて、Ｄバッファ（６）の「行番号」フィールドと「行高さ」フィールドに、それぞれ、“３１”と“２”が設定される。
【０１９０】
そして、ステップＳ１４９でｉｄｘの値が“４”に設定され、ステップＳ１５０でｉｄｘ＞階層レベル数と判別され、ステップＳ１５１、Ｓ１５２の処理が実行され、処理を終了する。
【０１９１】
この結果、表示装置８０の画面に表示される表の表示状態は、図１５（ｂ）に示す状態から、「関数」の行データの下に、横隙間データＣ３を挟んで「商品Ｅｘ」の行データの下半分が表示され、該「商品Ｅｘ」の行データの下半分に続いて、「商品Ｅｙ」の行データが表示される状態に変化する。
【０１９２】
続いて、下行表示クリック操作を行うと、今度は、「商品Ｅｙ」の行データが上にスクロールされ、横隙間データＣ３の下に、その下半分が表示されると共に、それに続いて、「商品Ｅｚ」の行データが上にスクロールして表示される。
【０１９３】
上記のような形態で、「関数」に属する項目の行データが、順に、下行スクロールして表示されるので、ユーザは、「関数」に属する表示先頭項目に、「商品Ｅｙ」や「商品Ｅｚ」の行データが表示されるようになっても、「関数」に属する項目が、隠されて表示されていることを知ることができる。
【０１９４】
次に、階層部の最下位行に、「商品Ｅｚ」の行データが表示されている状態で、下行表示のクリック操作が行われた場合の、図１２のフローチャートの処理を、図１６を参照しながら、説明する。
【０１９５】
この場合、現在表示先頭行カウンタ１１１の値は“３２”となっている。したがって、まず、ステップＳ１３１〜Ｓ１３３の処理が実行され、ステップＳ１３３で上位レベル変更ＦＬＧが“ＯＦＦ”に設定される。次に、ステップＳ１３４で、現在表示先頭行カウンタ１１１の値が“３３”に設定される。続いて、ステップＳ１３５で、ｉｄｘの値に“１”が設定される。
【０１９６】
ステップＳ１３４〜Ｓ１５０のループ処理は、ステップＳ１４９でｉｄｘの値が１インクリメントされながら、ステップＳ１５０で、ｉｄｘ＞階層レベル数と判別されるまで繰り返されるので、今回の場合、３回繰り返されることになる。
【０１９７】
まず、最初のループ処理においては、ステップＳ１３６で、Ｌ−ｉｄｘの値が“１”に設定され、続いて、ステップＳ１３７で、Ｌｅｖ１とＬｅｖ２に、それぞれ、“１”と“３”が設定される。そして、ステップＳ１３８で、上位レベル変更ＦＬＧが“ＯＦＦ”と判別され、ステップＳ１３９で、Ｌｅｖ１＜Ｌｅｖ２と判別される。この結果、ステップＳ１４０で、上位レベル変更ＦＬＧが“ＯＮ”に設定される。
【０１９８】
そして、ステップＳ１４１〜Ｓ１４４の一連の処理が実行され、Ｌバッファ（１）とＬバッファ（２）、及びＤバッファ（１）とＤバッファ（２）の「行番号」フィールド並びに「行高さ」フィールドの内容が書き換えられる。この結果、図１６（ｂ）に示すように、Ｌバッファ（１）の内容が“ＮＵＬＬ”から「電卓」の行データに更新される（ステップＳ１４１）。また、Ｌバッファ（２）の内容が「電卓」の行データから「時計」の行データに更新される（ステップＳ１４２）。また、Ｄバッファ（１）の「行番号」フィールドの内容が、“−”から“１”に更新されると共に、Ｄバッファ（１）の「行高さ」フィールドの内容が、“０”から“１／２Ｈ”に更新される（ステップＳ１４３）。また、更に、Ｄバッファ（２）の「行番号」フィールドの内容が、“１”から“３３”に更新されるが、Ｄバッファ（２）の「行高さ」フィールドの内容は、“Ｈ”のままで、更新されない（ステップＳ１４４）。
【０１９９】
次に、ステップＳ１４９で、ｉｄｘの値が“２”に更新され、ステップＳ１５０で、ＮＯと判別され、ステップＳ１３４に戻り、２回目のループ処理が開始される。今回のステップＳ１３４では、現在表示先頭行カウンタ１１１の値が“３４”に設定される。そして、ステップＳ１３５でｉｄｘの値が“２”に設定される。
【０２００】
次に、ステップＳ１３６で、Ｌ−ｉｄｘの値が“２”に設定され、続いて、ステップＳ１３７で、Ｌｅｖ１とＬｅｖ２に、それぞれ、“２”と“１”が設定される。そして、ステップＳ１３８で、上位レベル変更ＦＬＧが“ＯＦＦ”でないと判別され、ステップＳ１４５に移る。
【０２０１】
ステップＳ１４５では、Ｌバッファ（３）の内容を、「ＤＩＡＲＹ」の行データから“ＮＵＬＬ”に消去する。次に、ステップＳ１４６で、Ｌバッファ（４）に、行番号“３４”の「デジタル」の行データをコピーする。続いて、ステップＳ１４７で、Ｄバッファ（３）の「行番号」フィールドと「行高さ」フィールドに、それぞれ、“−”と“０”を設定する。そして、ステップＳ１４８で、Ｄバッファ（４）の「行番号」フィールドと「行高さ」フィールドに、それぞれ、“３４”と“Ｈ”を設定する。この結果、Ｌバッファ（３）、Ｌバッファ（４）、Ｄバッファ（３）、及びＤバッファ（４）の内容は、図１６（ａ）に示すようになる。
【０２０２】
次に、ステップＳ１４９で、ｉｄｘの値が“３”に設定され、ステップＳ１５０の判別がＮＯとなり、再び、ステップＳ１３４に戻り、３回目のループ処理を開始する。このループ処理において、ステップＳ１３４で、現在表示先頭行カウンタ１１１の値が“３５”に設定され、続いて、ステップＳ１３５〜Ｓ１３７の処理が行われる。この結果、ｉｄｘの値が“３”、Ｌ−ｉｄｘの値が“５”、Ｌｅｖ１とＬｅｖ２の値が、それぞれ、“３”と“２”に設定される。
【０２０３】
続いて、ステップＳ１３８で、上位レベル変更ＦＬＧが“ＯＦＦ”でないと判別され、再び、ステップＳ１４５〜Ｓ１４８の処理を実行する。この結果、Ｌバッファ（５）、Ｌバッファ（６）、Ｄバッファ（５）、及びＤバッファ（６）が更新される。すなわち、図１６（ａ）に示すように、Ｌバッファ（５）の内容が「商品Ｅｙ」の行データから“ＮＵＬＬ”に更新され、Ｌバッファ（６）の内容が「商品Ｅｘ」の行データから「商品Ｂａ」の行データに更新される。また、Ｄバッファ（５）の「行番号」フィールドと「行高さ」フィールドに、それぞれ、“−”と“０”が設定され、Ｄバッファ（６）の「行番号」フィールドと「行高さ」フィールドに、それぞれ、“３５”と“Ｈ”が設定される。
【０２０４】
次に、ステップＳ１４９で、ｉｄｘの値が“４”に設定され、ステップＳ１５０の判別がＹＥＳとなり、ステップＳ１５１、Ｓ１５２の処理を行い、処理を終了する。この結果、表示装置８０の画面には、図１６（ｂ）に示すような形態で、表が表示される。
【０２０５】
すなわち、階層部の１行目が、「電卓」の行データの表示から、横隙間データＣ１と「電卓」の行データの下半分の表示に変化する。また、階層部の２行目に「時計」の行データが表示される。そして、階層部の３行目に、「デジタル」の行データが表示され、４行目に「商品Ｂａ」が表示される。
【０２０６】
このように、下行スクロールにより、「電卓」に属するデータが画面から消え、「時計」に属する先頭のデータが階層部の最下位行に表示されるようになると、階層部の先頭行の上半分が隙間表示になり、その下半分に「電卓」の行データの下半分が表示されるようになる。そして、階層部の２行目に「時計」の行データが表示される。したがって、ユーザは、表において、「時計」項目のデータの前に、別の項目（この場合、「電卓」）のデータが隠されていることを、視覚的に、即座かつ容易に認識することができる。
【０２０７】
次に、図１７のフローチャートを参照しながら、上行表示の縦スクロール処理を説明する。ユーザが、上行スクロールボタン１０３Ｕをクリックする毎に（上行表示クリックイベントが発生する毎に）、図１７のフローチャートの処理が実行される。尚、図１７のフローチャートにおいて、上述した図１２のフローチャートで使用されている変数またはフラグと同一の変数及びフラグは、同一の表記をしている。また、このフローチャートの説明においても、表データテーブル１１ａの内容が、図１３（ａ）に示す状態であることを例にして、説明する。
【０２０８】
まず、変数ＷＴ−ＴＯＰに、現在表示先頭行カウンタ１１１の値を設定する（ステップＳ１６１）。表の初期表示においては、上述したように、現在表示先頭行カウンタ１１１の値は“３”に設定される。
【０２０９】
次に、ＷＫ−ＴＯＰの値から１を減算した値が、表データ属性情報テーブル１５ａの階層レベル数よりも小さいか判別する（ステップＳ１６２）。この判別は、上行表示、すなわち、下スクロールにおいて、表示データバッファ３１に、もはや、スクロールすべきデータが無くなったかを判別する処理である。この場合、階層レベル数は“３”であるので、現在表示先頭行カウンタ１１１の値が“３”になった場合、すなわち、表示装置８０の画面が、図１３（ｂ）に示すような初期表示画面または、スクロール操作を何回か行った後、該初期画面と同様な画面になっているときに、上行表示（下スクロール）のクリック操作が行われた場合に、ステップＳ１６２の判別がＹＥＳとなり、処理を終了する。
【０２１０】
一方、ステップＳ１６２の判別がＮＯ、すなわち、現在表示先頭行カウンタ１１１の値が“４”以上であれば、上位レベル変更ＦＬＧを“ＯＦＦ”に設定する（ステップＳ１６３）。
【０２１１】
次に、ｉｄｘに、現在表示先頭行カウンタ１１１に設定されている行番号の行データの階層レベルを代入する（ステップＳ１６４）。続いて、Ｌ−ｉｄｘに｛ｉｄｘ＋（ｉｄｘ−１）｝の値を代入する（ステップＳ１６５）。続いて、Ｌｅｖ１に現在表示先頭行カウンタ１１１に設定されている行番号（現在表示先頭行カウンタ１１１の指す行番号）より一つ手前の行番号の行データの階層レベルを設定し、Ｌｅｖ２に現在表示先頭行カウンタ１１１の設定されている行番号の行データの階層レベルを設定する（ステップＳ１６６）。
【０２１２】
次に、Ｌｅｖ１＜Ｌｅｖ２であるか判別する（ステップＳ１６７）。この判別は、上行表示（下スクロール）により、表の階層部の最下位行に表示される行データの属する上位項目の階層レベルが変化するか判別する処理である。この変化は、現在表示先頭行カウンタ１１１に設定されている行番号の行データの階層レベルが変化することに対応する。図１３（ｂ）の例では、現在表示先頭行カウンタ１１１の指す行番号が“３５”から“３４”に変化する場合、“３４”から“３３”に変化する場合、及び“３０”から“２９”に変化する場合である。このような変化の場合、表の先頭に表示される階層レベルが“３”の行データが属する階層が、別の階層（階層レベルが“２”または“１”の他の階層）に変化する。
【０２１３】
ステップＳ１６７で、Ｌｅｖ１＜Ｌｅｖ２でないと判別した場合には（ステップＳ１６７、Ｎ０）、表データテーブル１１ａの現在表示先頭行カウンタ１１１の指す行番号より“２”小さい行番号以前に存在するＬｅｖ１の指す階層レベルと同じ階層レベル、または、より上位の階層レベルの行データを先頭行方向に検索する（ステップＳ１６８）。
【０２１４】
そして、上記検索により、上記条件を満足する行データが見つけ出さたか判別し（ステップＳ１６９）、見つけ出されれば（ステップＳ１６９、ＹＥＳ）、ステップＳ１７０へ、見つけ出されなければ（ステップＳ１６９、ＮＯ）、ステップＳ１７１へ進む。
【０２１５】
ステップＳ１７０では、ステップＳ１６９の検索において最初に見つけ出された行データが、現在表示先頭行カウンタ１１１が指す行番号の行データと同じ階層レベルであるか判別する。そして、同じ階層レベルであれば（ステップＳ１７０、ＹＥＳ）、ステップＳ１７１〜Ｓ１７４の処理を実行する。すなわち、まず、Ｌバッファ（Ｌ−ｉｄｘ＋１）にＬバッファ（Ｌ−ｉｄｘ）の内容をコピーする（ステップＳ１７１）。続いて、Ｌバッファ（Ｌ−ｉｄｘ）に現在表示先頭行カウンタ１１１の指す行番号の行データをコピーする（ステップＳ１７２）。
【０２１６】
次に、Ｄバッファ（Ｌ−ｉｄｘ＋１）の「行番号」フィールドに、ステップＳ１７１においてＬバッファ（Ｌ−ｉｄｘ＋１）にコピーされた行データの行番号を、「行高さ」フィールドに“行の高さ／２”（＝１／２Ｈ）を設定する（ステップＳ１７３）。続いて、Ｄバッファ（Ｌ−ｉｄｘ）の「行番号」フィールドに、ステップＳ１７１でＬバッファ（Ｌ−ｉｄｘ）にコピーされた行データの行番号（現在表示先頭行カウンタ１１１に設定されている行番号）を、「行高さ」フィールドに“行の高さ”（＝Ｈ）を設定する（ステップＳ１７４）。
【０２１７】
上記処理を、図１８及び図１９を参照しながら説明する。
図１８（ａ）に示すように、現在表示先頭行カウンタ１１１の値が“３７”であるとする。このとき、同図（ａ）に示すように、階層部データバッファ３１ＢのＬバッファ（１）には「電卓」の行データが、Ｌバッファ（２）には「時計」の行データが、Ｌバッファ（３）には“ＮＵＬＬ”が、Ｌバッファ（４）には「デジタル」の行データが、Ｌバッファ（５）には「商品Ｂｂ」の行データが、Ｌバッファ（６）には「商品Ｂｃ」の行データが格納されている。また、階層部データバッファ管理テーブル３１ＤのＤバッファ（１）の「行高さ」フィールドには“１／２Ｈ”が、Ｄバッファ（２）の「行高さ」フィールドには“Ｈ”が、Ｄバッファ（３）の「行高さ」フィールドには“０”が、Ｄバッファ（４）の「行高さ」フィールドには“１／２Ｈ”が、Ｄバッファ（５）の「行高さ」フィールドには“１／２Ｈ”が、Ｄバッファ（６）の「行高さ」フィールドには“Ｈ”が設定されている。尚、「行番号」フィールドに設定されている行番号の説明は省略する。
【０２１８】
このとき、表示装置８０の画面には、表が同図（ｂ）に示す形態で表示される。すなわち、上述した図１４〜図１６と同様に、階層部データバッファ３１ＢのＬバッファ（１）〜（６）及び階層部データバッファ管理テーブル３１ＤのＤバッファ（１）〜（６）の内容にしたがって、表の階層部とデータ行部の先頭行の行データが表示される。この場合、現在、階層部の最下位行には、「時計」の「デジタル」に属する商品データ（行データ）である「商品Ｂｃ」が表示されており、「電卓」に属する商品データが表示されていないため、上述した理由により、「電卓」の行データは下半分のみが表示されている。また、同じく上述した理由により、「デジタル」に属する２番目の商品データ「Ｂｂ」も下半分だけが表示されている。
【０２１９】
図１８（ｂ）に示す状態のときに、上行表示のクリック操作がなされると、図１７のフローチャートの処理が実行される。このとき、現在表示先頭行カウンタ１１１の値は“３７”となっている。
【０２２０】
そして、ステップＳ１６１〜ステップＳ１６３の処理により、ステップＳ１６１でＷＫ−ＴＯＰに“３７”が、ステップＳ１６３で、上位レベル変更ＦＬＧが“ＯＦＦ”に設定される。そして、ステップＳ１６４で、ｉｄｘの値が“３”に設定され、続いて、ステップＳ１６５で、Ｌ−ｉｄｘの値が“５”に設定される。
【０２２１】
上記処理結果が、図１９（ａ）に示されている。
次に、ステップＳ１６６で、Ｌｅｖ１とＬｅｖ２の値が、共に、“３”に設定される。そして、ステップＳ１６７でＮＯと判別され、ステップＳ１６６で、表データテーブル１１ａの検索が実行される。そして、表データテーブル１１ａの行番号が“３５”の行データ（階層レベルが“３”の行データ）が見つけ出される。この結果、ステップＳ１６９及びステップＳ１７０の判別がＹＥＳとなり、ステップＳ１７１〜Ｓ１７４の処理が実行される。
【０２２２】
この結果、Ｌバッファ（５）、（６）の内容が、図１９（ａ）に示すように更新される。また、Ｄバッファ（５）、（６）の内容は、「行番号」フィールドは更新されるが（不図示）、「行高さ」フィールドは更新されない。
【０２２３】
次に、現在表示先頭行カウンタ１１１の値が１だけデクリメントされ（ステップＳ１７８）、同図（ａ）に示すように、現在表示先頭行カウンタ１１１の値は“３６”となる。そして、ステップＳ１９８、Ｓ１９９の処理を実行し、処理を終了する。ステップＳ１９８、Ｓ１９９の処理は、それぞれ、図１２のフローチャートのステップＳ１５１、Ｓ５２の処理と同様である。
【０２２４】
以上の処理の結果、表示装置８０の画面には、図１９（ｂ）に示す形態の表が表示される。
この表示状態において、更に、上行表示のクリックを行うと、再び、図１７のフローチャートの処理が実行される。このとき、現在表示先頭行カウンタ１１１の値は“３６”であるので、まず、ステップＳ１６１で、ＷＫ−ＴＯＰに“３６”が設定される。そして、ステップＳ１６２〜Ｓ１６６の処理が行われ、上位レベル変更ＦＬＧが“ＯＦＦ”に設定され、ｉｄｘ、Ｌ−ｉｄｘ、Ｌｅｖ１、及びＬｅｖ２の値が、図２０（ａ）の示すようになる。
【０２２５】
この結果、ステップＳ１６７でＹＥＳと判別され、ステップＳ１６８で、表データテーブル１１ａが検索される。そして、表データテーブル１１ａの行番号“３４”から行データの検索が開始され、行番号が“３４”の「デジタル」の行データが見つけ出される。したがって、ステップＳ１６９の判別がＹＥＳとなり、ステップＳ１７０に進む。ステップＳ１７０では、「デジタル」の行データは階層レベルが“２”なので、ＮＯと判別される。
【０２２６】
そして、ステップＳ１７５〜Ｓ１７８の処理が実行される。すなわち、Ｌバッファ（Ｌ−ｉｄｘ＋１）にＬバッファ（Ｌ−ｉｄｘ）をコピーする（ステップＳ１７５）。次に、Ｌバッファ（Ｌ−ｉｄｘ）のデータを消去する（ステップＳ１７６）。続いて、Ｄバッファ（Ｌ−ｉｄｘ）の「行番号」フィールドに“−”を、「行高さ」フィールドに“０”を設定し（ステップＳ１７７）、Ｄバッファ（Ｌ−ｉｄｘ＋１）の「行番号」フィールドに、ステップＳ１７５においてＬバッファ（Ｌ−ｉｄｘ＋１）にコピーされた行データの行番号を、「行高さ」フィールドに“Ｈ”を設定する（ステップＳ１７８）。
【０２２７】
以上の処理の結果、Ｌバッファ（５）、（６）及びＤバッファ（５）、（６）の内容が、図２０（ａ）に示すように更新される。
次に、ステップＳ１７９で、現在表示先頭行カウンタ１１１の値が“３５”に設定され、続いて、ステップＳ１９８、Ｓ１９９の処理を実行し、処理を終了する。
【０２２８】
この結果、表示装置８０の画面に表示される表の形態は、図１９（ｂ）に示す状態から図２０（ｂ）に示す状態に変化する。この場合、下行スクロールにより、階層部の最終行に、「デジタル」の先頭商品項目である「商品Ｂａ」の行データが表示されるようになるので、隙間データＣ３の表示が消える。但し、「電卓」に属する項目のデータが、画面に隠れているので、階層部の２行目の表示は変化せず、この行には、「電卓」の行データの下半分が隙間データＣ１の下に表示される。
【０２２９】
次に、図２０（ｂ）に示す表示状態において、上行表示のクリックが操作されると、再び、図１７のフローチャートの処理が実行される。このとき、現在表示先頭行カウンタ１１１の値は“３５”に設定されている。
【０２３０】
したがって、この場合の処理において、まず、ステップＳ１６１で、ＷＫ−ＴＯＰに“３５”が設定され、ステップＳ１６２でＮＯと判別され、ステップＳ１６３で上位レベル変更ＦＬＧが“ＯＦＦ”に設定される。
【０２３１】
次に、ステップＳ１６４で、ｉｄｘの値が“３”に設定され、続いて、ステップＳ１６５〜Ｓ１６６の処理が実行される。この結果、Ｌ−ｉｄｘの値が“５”に設定され、Ｌｅｖ１とＬｅｖ２が、共に、“２”と“３”に設定される。
【０２３２】
続いて、ステップＳ１６７でＬｅｖ１＜Ｌｅｖ２と判別され、ステップＳ１８０に進む。ステップＳ１８０では、表データテーブル１１ａを、ＷＫ−ＴＯＰが指す行番号を起点として、先頭行方向に、該行番号の行データと同一レベルの行データを検索する。そして、該検索により最初に見つけ出された行データの行番号を、ポインタＰに設定する（ステップＳ１８１）。この結果、ＷＫ−ＴＯＰの現在値は“３５”であるので、ポインタＰに“３２”が設定される。
【０２３３】
次に、表データテーブル１１ａのポインタＰの指す行番号より一つ小さい行番号（Ｐ−１）を起点として、先頭行方向に、ステップＳ１８０において検索された行データと同じ階層レベルか、それより上位の階層レベルの行データを検索する。尚、この時、ポインタＰの値が“１”である場合は、検索すべき行データがないので、検索しない（ステップＳ１８２）。そして、該検索により最初に見つけ出された行データの階層レベルと、ステップＳ１８０で検索された行データのルが同じであるか判別する（ステップＳ１８３）。尚、この判別において、上述したように、ポインタＰの値が“１”であるときは、検索結果は得られないので、判別は“ＮＯ”となる。
【０２３４】
この場合、階層レベルが“３”である行番号が“３１”の行データが検索されるので、ステップＳ１８３の判別はＹＥＳとなり、ステップＳ１８４に進む。一方、ステップＳ１８３の判別がＮＯの場合は、ステップＳ１８７に進む。
【０２３５】
ステップＳ１８４では、ステップＳ１８２で見つけ出された行データの行番号をポインタＱに設定する。この場合、ポインタＱの値は“３１”になる。
次に、Ｌバッファ（Ｌ−ｉｄｘ）に、ポインタＱの指す行番号の行データを設定する（ステップＳ１８５）。この結果、Ｌバッファ（５）に行番号が“３１”の「商品Ｅｙ」の行データが設定される。
【０２３６】
続いて、Ｄバッファ（Ｌ−ｉｄｘ）の「行番号」フィールドに、ステップＳ１８５でＬバッファ（Ｌ−ｉｄｘ）に格納された行データを設定すると共に、「行高さ」フィールドに“１／２”を設定する（ステップＳ１８６）。
【０２３７】
次に、Ｌバッファ（Ｌ−ｉｄｘ＋１）にポインにタＰが指す行番号の行データを格納する（ステップＳ１９０）。この結果、Ｌバッファ（６）に、行番号が“３２”の「商品Ｅｚ」の行データが設定される。
【０２３８】
続いて、Ｄバッファ（Ｌ−ｉｄｘ＋１）の「行番号」フィールドに、Ｌバッファ（Ｌ−ｉｄｘ＋１）に格納された行データの行番号を設定すると共に、「行高さ」フィールドに“Ｈ”を設定する（ステップＳ１９１）。この結果、Ｄバッファ（６）の「行番号」フィールドと「行高さ」フィールドに、それぞれ、“３２”と“Ｈ”が設定される。
【０２３９】
次に、上位レベル変更ＦＬＧを判別し（ステップＳ１９２）、上位レベル変更ＦＬＧが“ＯＦＦ”であれば（ステップＳ１９２、ＹＥＳ）、ステップＳ１９３に進み、“ＯＦＦ”でなければ（ステップＳ１９２、ＹＥＳ）、ステップＳ１９５に進む。
【０２４０】
ステップＳ１９３では、現在表示先頭行カウンタ１１１にポインタＰの値を設定する。この結果、現在表示先頭行カウンタ１１１の値は“３２”になる。
次に、上位レベル変更ＦＬＧを“ＯＮ”に設定し（ステップＳ１９４）、続いて、ｉｄｘの値を１だけデクリメントすると共に、ＷＫ−ＴＯＰにポインタＱの値を代入する（ステップＳ１９５）。この結果、ｉｄｘの値が“２”に、ＷＫ−ＴＯＰの値が“３１”になる。
【０２４１】
次に、ｉｄｘの値が“０”であるか判別し（ステップＳ１９６）、“０”であれば（ステップＳ１９６、ＹＥＳ）、ステップＳ１９８に進むが、“０”でなければ（ステップＳ１９５、ＮＯ）、ステップＳ１９７に進む。
【０２４２】
この場合、ｉｄｘの値は“２”となっているので、ステップＳ１９７に進み、ステップＳ１９７で、Ｌ−ｉｄｘに、｛ｉｄｘ＋（ｉｄｘ−１）｝の値を代入し、ステップＳ１８０に戻る。この結果、Ｌ−ｉｄｘの値は“３”となる。
【０２４３】
このようにして、ステップＳ１８０〜Ｓ１９７の１回目のループ処理を終了する。該ループ処理は、ステップＳ１９６で、ｉｄｘの値が“０”と判別されるまで、繰り返される。
【０２４４】
続いて、２回目のループ処理が開始される。この時点で、ＷＫ−ＴＯＰの値は“３１”、ｉｄｘの値は“２”となっている。このため、ステップＳ１８０で、表データテーブル１１ａを、行番号“３１”を起点として、階層レベルが“２”の行データが検索される。この結果、表データテーブル１１ａから行番号が“２９”の階層レベルが“２”である「関数」の行データが検索される。
【０２４５】
したがって、ステップＳ１８１でポインタＰに“２９”が設定され、ステップＳ１８２で、表データテーブル１１ａにおいて、行番号“２９”を起点として、階層レベルが“２”以上の行データの検索が行われる。この結果、表データテーブル１１ａから行番号が“２”の階層レベルが“２”である「ＤＩＡＲＹ」の行データが検索される。
【０２４６】
この場合、同じ階層レベルである“２”の行データが検索されたので、ステップＳ１８３の判別は、ＹＥＳとなり、再び、ステップＳ１８４〜Ｓ１８６の処理が開始される。この結果、ポインタＱに“２”が設定され（ステップＳ１８４）、Ｌバッファ（３）にポインタＱが指す行番号が“２”の「ＤＩＡＲＹ」の行データが設定される（ステップＳ１８５）。また、Ｄバッファ（３）の「行番号」フィールドに“２”、「行高さ」フィールドに“１／２Ｈ”が設定される（ステップＳ１８６）。
【０２４７】
続いて、Ｌバッファ（４）にポインタＰが指す行番号“２９”の行データが設定され（ステップＳ１９０）、Ｄバッファ（４）の「行番号」フィールドに“２９”、「行高さ」フィールドに“Ｈ”が設定される（ステップＳ１９１）。
【０２４８】
続いて、上位レベル変更ＦＬＧが“ＯＦＦ”であるか判別されるが（ステップＳ１９２）、この場合、上位レベル変更ＦＬＧは“ＯＮ”に設定されているので、ステップＳ１９２の判別は“ＮＯ”となり、ステップＳ１９５に移り、ステップＳ１９５において、ｉｄｘの値が“１”に、ＷＫ−ＴＯＰの値が“２”に設定される。そして、再度、ステップＳ１９６で“ＮＯ”と判別され、ステップＳ１９７で、Ｌ−ｉｄｘに“１”が設定され、ステップＳ１８０に戻る。
【０２４９】
これにより、３回目のループ処理が開始される。この時点で、ＷＫ−ＴＯＰの値は“２”、ｉｄｘの値は“１”であるので、今度のステップＳ１８０の表データテーブル１１ａの検索おいては、行番号“２”を起点として、階層レベルが“１”の行データが検索される。この結果、表データテーブル１１ａから、行番号が“１”の行データが検索される。そして、ステップＳ１８１で、ポインタＰに“１”が設定される。上述したように、この場合、ステップＳ１８２において検索は行われず、ステップＳ１８３の判別は“ＮＯ”となる。したがって、続いて、ステップＳ１８７〜Ｓ１８９の処理を行う。
【０２５０】
すなわち、ポインタＱにポインタＰの値を代入する（ステップＳ１８７）。この結果、ポインタＰに設定されていた行番号が、ポインタＱに設定され、ポインタＱの値は“１”になる。次に、Ｌバッファ（Ｌ−ｉｄｘ）のデータを消去する（ステップＳ１８８）。この結果、Ｌバッファ（１）の内容が“ＮＵＬＬ”になる。続いて、Ｄバッファ（Ｌ−ｉｄｘ）の「行番号」フィールドを“−”に、「行高さ」フィールドを“０”に設定する。この結果、Ｄバッファ（１）の「行番号」フィールドが“−”に、「行高さ」フィールドが“０”に設定される。
【０２５１】
次に、ステップＳ１９０に移り、ステップＳ１９０において、Ｌバッファ（２）にポインタＰが指す行番号の行データをコピーする。この結果、Ｌバッファ（２）に、行番号が“１”の「電卓」の行データが格納される。続いて、Ｄバッファ（２）の「行番号」フィールドに、ステップＳ１９０において、Ｌバッファ（２）に格納された「電卓」の行データの行番号“１”を設定し、「行高さ」フィールドに“Ｈ”を設定する。
【０２５２】
次に、ステップＳ１９２で、上位レベル変更ＦＬＧが“ＯＦＦ”でないと判別し、ステップＳ１９５に移る。そして、ステップＳ１９５において、ｉｄｘの値を“０”に設定し、ＷＫ−ＴＯＰに、ポインタＱに設定されている“１”を代入する。
【０２５３】
これにより、ステップＳ１９６で、ｉｄｘの値が“０”であると判別し、ステップＳ１９８、Ｓ１９９の処理を行い、図１７のフローチャートの処理を終了する。
【０２５４】
以上説明した、現在表示先頭行カウンタ１１１、ＷＫ−ＴＯＰ、ｉｄｘ、及びポインタＰ、Ｑの状態遷移と、最終的な階層部データバッファ３１Ｂと階層部データバッファ管理テーブル３１Ｄの「行高さ」フィールドの内容を、図２１（ａ）に示している。このような、階層部データバッファ管理テーブル３１Ｄと階層部データバッファ３１Ｂの内容に基づいて、図１７のフローチャートのステップＳ１９８、Ｓ１９９が実行されることにより、表示装置８０の画面には、図２１（ｂ）に示すような表が表示される。同図（ｂ）には、表の列見出し部、階層部、及びデータ行部の１行目から４行目の右端部分が示されている。同図（ｂ）にめすように、階層部の１行目には「電卓」の行データ全体が、２行目には、隙間データＣ２と第１の階層レベル“２”の項目である「ＤＩＡＲＹ」の下半分の行データが表示されている。
【０２５５】
また、階層部の３行目には第２の階層レベル“２”の項目である「関数」の行データ全体が、４行目には隙間データＣ３と「関数」に属する２番目の商品項目である「商品Ｅｙ」の行データの下半分が表示されている。そして、階層部の最下位行である５行目には、現在の先頭表示商品項目行データである「関数」に属する３番目の商品項目である「商品Ｅｚ」の全体が表示されている。
【０２５６】
ユーザは、図２１（ｂ）に示す表の画面表示を閲覧することにより、「電卓」の下位階層として、「関数」以外の項目が表示画面においては隠されており、また、「関数」の下位階層である商品項目についても「商品Ｅｚ」より前の行の商品項目が隠されていることを、瞬時に、かつ、容易に、視覚的に認識することができる。
【０２５７】
尚、図２１（ｂ）に示す表示状態において、更に、表を上行表示（上行スクロール）させていくことにより、最終的に、図１３（ｂ）に示す初期画面を表示させることができるが、この動作の説明は省略する。
【０２５８】
図２２は、上述した下行・上行表示処理縦スクロール処理によって、表示装置８０の画面に表示される表（括り表）の全体を示す図である。尚、同図において「大分類１」（下半分のみ表示）及び「大分類２」が、それぞれ、図１４〜１６、図１８〜２１に示された「電卓」及び「時計」に該当している。また、「中分類Ａ」（不図示）、「中分類Ｂ」及び「中分類Ｃ」が、それぞれ、図１４〜１６、図１８〜２１に示された「ＤＩＡＲＹ」、「関数」及び「デジタル」に該当している。また、図２２では、図１４〜１６、図１８〜２１では省略されていた「商品コード」（２１００２、２１００３、２１００４、・・・）も示されている。
【０２５９】
図２２に示す表は、大分類の項目（階層レベルが“１”の項目）、中分類の項目（階層レベルが“２”の項目）及び小分類の項目（階層レベルが“３”の項目）が、全て、縦スクロールされた状態を示している。
【０２６０】
すなわち、図２２に示す表示は、「大分類１」に属する全ての項目、「大分類２」に属する「中分類Ａ」及び「中分類Ｂ」に属する全ての項目が、表示装置８０の画面では隠されており、「大分類２」に属する「中分類Ｃ」においても、該「中分類Ｃ」に属する一部の「小分類」の項目が隠されて表示されていることを示している。
【０２６１】
尚、以上に述べた、本発明の実施形態では、階層レベルが３階層の表（括り表）のスクロール表示の例を取り上げて説明したが、本発明は、階層レベル数が限定されるものではなく、４階層以上の構成の任意の表のスクロール表示にも適用できるものである。
【０２６２】
また、上述した列名一覧表示において、該列名一覧表示上の任意の列名をクリック等により指定することにより、該指定された列が画面の任意の位置に表示させるようにする応用実施形態も可能である。このような実施形態によれば、例えば、現在、画面に表示されていない列を、ユーザが所望する位置に表示させて、該列を、即座に縦スクロール可能な状態にすることができる。このようにすれば、表の任意の列の項目の閲覧を、効率よく、スピーディーに行うことが可能となる。
【０２６３】
図２６は、上記実施形態を実現するコンピュータ３００のハードウェア構成を示すブロック図である。
該コンピュータ３００は、ＣＰＵ３０１と、該ＣＰＵ３００とバス３０９によって接続されたＲＯＭ３０２、ＲＡＭ３０３、外部記憶装置３０４、記録媒体駆動装置３０５、入出力装置３０７、及び通信インターフェース３０８から構成される。
【０２６４】
ＣＰＵ３０１は、バス３０９を介して上記各構成要素３０２〜３０８にアクセス可能であり、システム全体を制御する。本発明の実施形態のアルゴリズムを実現するプログラムは、例えば、ＲＯＭ３０２、外部記憶装置３０４、または可搬記録媒体３０６に格納される。
【０２６５】
ＲＯＭ３０２や外部記憶装置３０４に格納された上記プログラムは、ＲＡＭ３０３上に、ＣＰＵ３０１が実行可能な形式に展開されて、ＣＰＵ３０１により実行される。また、可搬記録媒体３０６に格納されている上記プログラムは、該可搬記録媒体３０６が記録媒体駆動装置３０５に装着されることにより、記録媒体駆動装置３０５により読み取られ、ＲＡＭ３０３上に、ＣＰＵ３０１が実行可能な形式に展開されて、ＣＰＵ３０１により実行される。
【０２６６】
また、上記プログラムは、コンピュータ３００とネットワーク４００を介して接続された情報提供者５００が保有していてもよく、この場合には、通信インターフェース４００が、ネットワーク４００を介して、情報提供者５００が保有していている上記プログラムを、外部記憶装置３０４にダウンロードする。そして、この外部記憶装置３０４にダウンロードされた上記プログラムは、上述した方法により、ＣＰＵ３０１により実行される。
【０２６７】
入出力装置３０７は、図１の入力装置９０及び表示装置８０に該当し、ユーザが入出力装置３０７の表示画面に表を初期表示させるためのコマンドの入力や、画面表示されている表を横スクロール及び縦スクロールするために利用される。また、該スクロール操作に応じて、表の縦スクロール表示及び横スクロール表示を行う。
【０２６８】
外部記憶装置３０４は、図１の外部記憶装置１１０または記録媒体駆動装置３０５並びに可搬記録媒体３０６に該当する。ＲＡＭ３０３は、図１の表情報テーブル１０、表示メモリ３０、及び列名一覧データバッファ６０等に該当する。
【０２６９】
尚、インデックス１０８、２０８は、ＲＡＭ３０３に格納されてもよい。ＲＡＭ３０３には、ワーク領域１１０、２１０や前記バッファ等が確保される。
また、情報提供者５００が、上記プログラムを実行可能なコンピュータ、及び表情報テーブル１０を格納している外部記憶装置を備えている場合には、ユーザが入出力装置３０７から、上記プログラムを遠隔実行するためのコマンドを入力することにより、通信インターフェース３０８及びネットワーク４００を介して、上記プログラムを、情報提供者５００が保有するコンピュータで遠隔実行させることも可能である。この場合、情報提供者５００が保有するコンピュータで得られた表の表示データを、コンピュータ３００が、ネットワーク４００及び通信インターフェース３０８を介して受信することが可能であり、該受信された表示データは入出力装置３０７から、ユーザが視覚可能な形式で表示される。
【０２７０】
尚、可搬記録媒体３０６は、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＡＭ、各種規格のＤＶＤ、光磁気記録方式もしくは相変化型の光ディスク、ＩＣカード等である。また、外部記憶装置３０４は、ハードディスクやディスクアレイ等である。また、入出力装置３０７は、キーボードやマウス等のポインティング・デバイス、及びＣＲＴディスプレイ、もしくは液晶ディスプレイ、プラズマ・ディスプレイ、有機ＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｅｎｃｅ）ディスプレイ等の薄型ディスプレイである。
【０２７１】
また、ネットワーク４００は、ＬＡＮ、ＭＡＮ、ＷＡＮ、もしくはインターネット等である。
【図面の簡単な説明】
【０２７２】
【図１】本発明の実施形態のシステムの全体構成を示すブロック図である。
【図２】図１の表情報テーブルに格納されている、表データテーブル、表属性情報テーブル１３、及び表データ属性情報テーブルのデータ構造を示す図である。
【図３】本実施形態の全体動作を説明するフローチャートである。
【図４】表示データバッファ及び隙間データバッファのデータ構造を示す図である。
【図５】列幅情報テーブル及び列名一覧データバッファのデータ構造を示す図である。
【図６】表の初期表示処理を説明するフローチャートである。
【図７】表の階層部及びデータ行部の表示処理を行う共通サブルーチンを説明するフローチャートである。
【図８】列見出し部データバッファ、階層部データバッファ管理テーブル、階層部データバッファ、データ行部データバッファ、及び隙間データバッファとそれらのポインタとの関係を説明する図である。
【図９】列見出し部データバッファ、階層部データバッファ、及びデータ行部データバッファの表示範囲を説明する図である。
【図１０】列名一覧表示処理を説明するフローチャートである。
【図１１】本実施形態の横スクロール処理を説明するフローチャートである。
【図１２】下行表示縦スクロール処理を説明するフローチャートである。
【図１３】表データテーブルの内容の具体例と、該具体例に対応する表の初期表示画面を示す図である。
【図１４】表の初期表示画面において、１行下行表示縦スクロールが行われた場合の、階層部データバッファ等の内容の変化と、その際の表の表示状態の変化を示す図である。
【図１５】表の階層部の最下位行に表示される階層レベルが“３”の項目が属する階層レベルが“２”の項目が、下行表示縦スクロールにより変化する場合の、階層部データバッファ等の内容の変化と、その際の表の表示状態の変化を示す図である。
【図１６】表の階層部の最下位行に表示される階層レベルが“３”の項目が属する階層レベルが“１”の項目が、下行表示縦スクロールにより変化する場合の、階層部データバッファ等の内容の変化と、その際の表の表示状態の変化を示す図である。
【図１７】本実施形態の上行表示縦スクロール処理を説明するフローチャートである。
【図１８】上行表示縦スクロールの第１の動作例を説明する図である。
【図１９】上行表示縦スクロールの第２の動作例を説明する図である。
【図２０】上行表示縦スクロールの第３の動作例を説明する図である。
【図２１】上行表示縦スクロールの第４の動作例を説明する図である。
【図２２】上行表示縦スクロールより、第２の階層レベル“１”の第３の階層レベル“２”に属する階層レベルが“３”に属する商品項目が表示されている表表示全体を示す図である。
【図２３】本実施形態の表の一例である商品売上実績表の初期表示画面を示す図である。
【図２４】図２３の初期表示画面において、右列スクロールが行われた場合の第１の表示例を示す図である。
【図２５】図２４の表示画面において、さらに、右列スクロールを行い、商品売上実績表の最右端の列まで表示させた状態を示す図である。
【図２６】本発明の実施形態を実現するコンピュータのハードウェア構成を示すブロック図である。
【図２７】従来の、スクロールされない固定領域とスクロール可能なスクロール領域を有する表を、横スクロールした際に発生する、該表の表示形態の第１の問題点を説明する図である。
【図２８】従来の、スクロールされない固定領域とスクロール可能なスクロール領域を有する表を、表示する際の第２の問題点を説明する図である。
【符号の説明】
【０２７３】
１０  表情報テーブル
１１  表データ記憶部
１１ａ  表データテーブル
１３  表属性情報テーブル
２０  表データ生成部
３０  表示メモリ
３１  表示データバッファ
３１Ａ  列見出し部データバッファ
３１Ｂ  階層部データバッファ
３１Ｃ  データ行部データバッファ
３１Ｅ  固定列部
３１Ｆ  スクロール列部
３２  隙間データバッファ
４０  列名情報生成制御部
４１  列名幅情報調整部
４３  列幅情報テーブル
５０  列名表示データ生成部
６０  列名一覧データバッファ
７０  表データ表示制御部
７１  表座標設定レジスタ
７２  列名表座標設定レジスタ
７３  表幅設定レジスタ
７４  表高設定レジスタ
７５  行高設定レジスタ
７６  隙間行高設定レジスタ
７７  列名修飾情報設定レジスタ
８０  表示装置
９０  入力装置
１００  スクロール制御部
１０１Ａ、１０１Ｂ、１０１Ｃ  列名一覧表示
１０３Ｕ  上行スクロールボタン
１０３Ｄ  下行スクロールボタン
１０５Ｌ  左列スクロールボタン
１０５Ｒ  右列スクロールボタン
１１１  現在表示先頭行カウンタ
１１３  固定部
１１５  スクロール部
【図１】
2005267651.tif 000003
【図２】
2005267651.tif 000004
【図３】
2005267651.tif 000005
【図４】
2005267651.tif 000006
【図５】
2005267651.tif 000007
【図６】
2005267651.tif 000008
【図７】
2005267651.tif 000009
【図８】
2005267651.tif 000010
【図９】
2005267651.tif 000011
【図１０】
2005267651.tif 000012
【図１１】
2005267651.tif 000013
【図１２】
2005267651.tif 000014
【図１３】
2005267651.tif 000015
【図１４】
2005267651.tif 000016
【図１５】
2005267651.tif 000017
【図１６】
2005267651.tif 000018
【図１７】
2005267651.tif 000019
【図１８】
2005267651.tif 000020
【図１９】
2005267651.tif 000021
【図２０】
2005267651.tif 000022
【図２１】
2005267651.tif 000023
【図２２】
2005267651.tif 000024
【図２３】
2005267651.tif 000025
【図２４】
2005267651.tif 000026
【図２５】
2005267651.tif 000027
【図２６】
2005267651.tif 000028
【図２７】
2005267651.tif 000029
【図２８】
2005267651.tif 000030