あとは基本的な使い方と同じコードで、AM_MenuExec関数が文字の入力や編集の処理をすべて実行します。
- 入力フィールドのための入力バッファを定義します。
入力フィールドに表示される文字列は常にこのバッファに格納されています。 入力フィールドに表示する初期値はこのバッファから読み出します。文字を入力した結果も、このバッファに書き込みます。
サンプルstatic char UID_EditBuf[8+1] = {""};
- AM_EditParam構造体で入力フィールドの制御に必要な情報を定義します。
次の情報を設定します。
- 最大文字数
- カーソルを表示する場合は、カーソルの表示色
- 英字モードを使用する場合は、候補文字の表示色
- 入力操作の詳細を指定するオプションフラグ
- 前述の入力バッファを指すポインタ
- 前述の入力バッファの長さ
- その他
サンプルstatic const AM_EditParam EditParamUID = { 8, // MaxDigits RGB_WHITE, // Cursor foregraund Color RGB_BLUE, // Cursor backgraund Color RGB_WHITE, // Shift mode foregraund Color RGB_BLUE, // Shift mode backgraund Color AM_EDIT_NUMERIC|AM_EDIT_UNDERLINE|AM_EDIT_CLEAR_ON_FIRST_CHAR|AM_EDIT_NO_CURSOR, // EditOption NULL, // alphaCandidateTable UID_EditBuf, // Value sizeof(UID_EditBuf) // ValueBufSize };
- 入力フィールドのためのメニューアイテムでは、AM_MenuItem構造体のshowControlにAM_TEXT_EDITを設定し、
menuTextに上記のAM_EditParam構造体を指すポインタを指定します。
サンプルstatic const AM_MenuItem SettingtMenuTable[] = { // itemID, y, x, menuText, Palette, visible, enabled, selectable, showControl ... {SET_ID_UID, 6, 9, (void *)&EditParamUID, PX_EDIT, true, true, true, AM_TEXT_EDIT}, ... };
- あとは基本的な使い方と同様に、 AM_CreateMenu関数でメニューリソースを生成し、 AM_ShowMenu関数で画面を表示し、 AM_ExecMenu関数でキー入力を待機してイベントを処理します。
さらに...
- AM_CreateMenu関数でメニューリソースを生成したあとであれば、 AM_GetText関数やAM_SetText関数を使用して、入力フィールドのために定義した入力バッファの内容を読み書きできます。
- 上記のサンプルでは、AM_EditParam構造体のEditOptionにAM_EDIT_NUMERICを指定して数字入力のための入力フィールドにしていますが、 英字や記号を入力する場合は、AM_EDIT_NUMERICを外します。詳しくはAM_EditParam構造体のEditOptionの説明を参照してください。
- 英字や記号を入力する場合は、[SHIFT]キーを押して入力モードを切り替える操作を行いますが、AM_MenuItem構造体ののshowControlにAM_SHIFT_MODEやAM_SHIFT_CANDIDATEを指定することにより、 画面上に現在のシフトモードや候補文字を表示することができます。コーディング例は、サンプルプログラムのedit_name関数を参照してください。
サンプル
数字入力のサンプル
...
// Text field parameter
static char UID_EditBuf[8+1] = {""};
static const AM_EditParam EditParamUID = {
8, // MaxDigits
RGB_WHITE, // Cursor foregraund Color
RGB_BLUE, // Cursor backgraund Color
RGB_WHITE, // Shift mode foregraund Color
RGB_BLUE, // Shift mode backgraund Color
AM_EDIT_NUMERIC|AM_EDIT_UNDERLINE|AM_EDIT_CLEAR_ON_FIRST_CHAR|AM_EDIT_NO_CURSOR, // EditOption
NULL, // alphaCandidateTable
UID_EditBuf, // Value
sizeof(UID_EditBuf) // ValueBufSize
};
// Item ID
enum _SETTING_ITEM_ID {
SET_ID_UID = 1,
SET_ID_APPLY,
};
// Table of the menu items for the setting screen
static const AM_MenuItem SettingtMenuTable[] = {
// itemID, y, x, menuText, Palette, visible, enabled, selectable, showControl
{0, 0, 0, " Settings ", PX_TITLE_SETTING, true, true, false, AM_NO_CONTROL},
{0, 6, 1, "UserID:", PX_BASE, true, true, false, AM_NO_CONTROL},
{SET_ID_UID, 6, 9, (void *)&EditParamUID, PX_EDIT, true, true, true, AM_TEXT_EDIT},
{0, AM_PIX(129), 0, "Cancel", PX_GUIDE, true, true, false, AM_CLEAR_ICON},
{SET_ID_APPLY, AM_PIX(129), AM_PIX(64), "Apply", PX_APPLY, true, true, false, AM_ENT_ICON},
{-1}
};
void settings(MENU_HANDLE hMain)
{
MENU_HANDLE hMenu;
int event;
bool exit = false;
hMenu = AM_CreateMenu(SettingtMenuTable, (const pAM_Option)&SettingOption);
while(1){
AM_ShowMenu(hMenu, AM_SELECT_ANY_ID);
while(1){
event = AM_ExecMenu(hMenu);
if (event == CLR_KEY){
exit = true;
break;
}else if (event == ENT_KEY){
// Input string is stored in UID_EditBuf.
...
exit = true;
break;
}
}
if (exit){
break;
}
}
AM_ReleaseMenu(hMenu);
return;
}
英字入力のサンプル
...
void edit_name(char *namebuf, int length)
{
/////////////////////////////////////////
// Local definition of the menu items
/////////////////////////////////////////
static char name_EditBuf[20+1] = {""};
static const AM_EditParam EditParamName = {
20, // MaxDigits
RGB_WHITE, // Cursor foregraund Color
RGB_BLUE, // Cursor backgraund Color
RGB_WHITE, // Shift mode foregraund Color
RGB_BLUE, // Shift mode backgraund Color
AM_EDIT_SET_ALPHA | AM_EDIT_MOVE_CURSOR_BY_Q1Q2, // EditOption
NULL, // alphaCandidateTable
name_EditBuf, // Value
sizeof(name_EditBuf) // ValueBufSize
};
// Item ID
enum _SETTING_NAME_ITEM_ID {
SET_ID_ENAME = 1,
SET_ID_EAPPLY,
};
// Table of the menu items for the name screen
static const AM_MenuItem SettingtNameTable[] = {
// itemID, y, x, menuText, Palette, visible, enabled, selectable, showControl
{0, 0, 0, " Name ", PX_TITLE_SETTING, true, true, false, AM_NO_CONTROL},
{0, 2, 1, "Name:", PX_BASE, true, true, false, AM_NO_CONTROL},
{SET_ID_ENAME, 3, 1, (void *)&EditParamName, PX_EDIT, true, true, true, AM_TEXT_EDIT},
{0, 5, 1, "", PX_GUIDE, true, true, false, AM_SHIFT_MODE},
{0, 5, 7, "", PX_GUIDE, true, true, false, AM_SHIFT_CANDIDATE},
{0, AM_PIX(129), 0, "Cancel", PX_GUIDE, true, true, false, AM_CLEAR_ICON},
{SET_ID_EAPPLY,AM_PIX(129), AM_PIX(64), "Apply", PX_APPLY, true, true, false, AM_ENT_ICON},
{-1}
};
/////////////////////////////////////////
MENU_HANDLE hMenu;
int event;
strncpy(name_EditBuf, namebuf, sizeof(name_EditBuf)-1);
hMenu = AM_CreateMenu(SettingtNameTable, (const pAM_Option)&SettingOption);
AM_ShowMenu(hMenu, AM_SELECT_ANY_ID);
while(1){
event = AM_ExecMenu(hMenu);
if (event == CLR_KEY){
break;
}else if (event == ENT_KEY){
memset(namebuf, 0, length);
strncpy(namebuf, name_EditBuf, length - 1);
break;
}
}
AM_ReleaseMenu(hMenu);
return;
}
関連事項
最終更新日:2020/10/08