リスト表示の画面では、下図のようにリスト表示領域にリストアイテムを表示し、それ以外の領域にはメニューアイテムを表示できます。
 次の手順でリスト画面を表示し、キー入力を待機して処理を行います。
  1. 基本的な使い方と同じ手順でメニューアイテムオプションを定義します。

  2. AL_CreateList関数に、前項で定義したメニューアイテムオプションリスト表示領域の指定を渡してリストリソースを生成し、そのリソースを参照するためのリストハンドルを取得します。
    サンプル
        LIST_HANDLE hList;
        ...
        hList = AL_CreateList(ListMenuTable, (const pAM_Option)&ListOption, AM_PIX(18), 7);
    

    サンプルでは、Y座標が18(ピクセル座標)の位置から7行分の領域をリスト表示領域に指定しています。

  3. AL_AddListItem関数またはAL_AddListItemEx関数でリスト表示領域に表示するリストアイテムを登録します。
    サンプル
        AL_ListItem item;
        char *buffCode;
        char *buffName;
        char textBuff[21+1];
        ...
        item.listText = textBuff;
        item.paletteIndex = PX_BASE;
        item.showControl = AM_NO_CONTROL;
        item.userParam1 = (int)buffCode; //userParam1 for the code
        item.userParam2 = (int)buffName; //userParam2 for the name
    
        //Add list item
        if (!AL_AddListItem(hList, &item)){
            //Error
            ...
        }
    

    サンプルでは、AL_ListItem構造体のuserParam1とuserParam2にmalloc関数でアロケートしたメモリを指すポインタを設定しています。

  4. AL_ShowList関数でリスト画面を表示します。
    サンプル
        AL_ShowList(hList, 0, 0);
    

  5. AL_ExecList関数でキー入力を待機し、イベントを処理します。
    AL_ExecList関数は次の機能を提供します。
    • フォーカスがあるリストアイテムにハイライトを表示する。
    • [Q1]キー、[Q2]キーでフォーカスを上下に移動する。
    • リスト表示領域の行数よりも多くのリストアイテムが登録されているときは、フォーカスの移動に合わせてリストを上下にスクロールさせ、フォーカスのあるリストアイテムが常にリスト表示領域に表示されるようにする。
    • 何らかの入力があればイベントを返す。
    • 入力が無い場合はIdle関数を呼びながら入力を待機する。
    サンプル
        while(1){
            event = AL_ExecList(hList);
            if (event == CLEAR_KEY){
                //Exit
                break;
            }else{
                ...
            }
        }
    

  6. リスト画面を閉じるときはAL_ReleaseList関数リストハンドルを渡してリストリソースを解放します。
    サンプル
        AL_ReleaseList(hList);
    

関連事項

最終更新日:2020/10/16