フィールドはリソースで定義しておけば、
ユーザーから入力された文字を保存しておくメモリ領域を
自動的に確保してくれますが、
初期表示のようにプログラムで初期値を設定する場合は、
メモリ領域をプログラムで確保する必要があります。
良くある処理なので、関数化しておくと便利です。
Palmsourceにある Palm OS SDK: Version 4.0のExamplesにも (Finger\Src\FingerMain.c(190): FieldPtr SetFieldTextFromStr( FormPtr formP, UInt16 fieldID, MemPtr strP )) 同様の関数が定義されているので、 自分の用途に合った関数を作成してみましょう。
/* Fieldオブジェクトに指定文字列を設定する */ Err SetStrToFieldText( FieldPtr pField, /* I:Fieldポインタ */ const Char *str) /* I:Field設定文字列 */ { MemHandle hMem; hMem = FldGetTextHandle(pField); if (NULL != hMem) /* Fieldにメモリハンドルが設定されていた */ { Err err; /* メモリハンドルが設定されているのでリサイズする */ FldSetTextHandle(pField, NULL); /* Fieldからメモリハンドルを切り離す */ err = MemHandleResize(hMem, StrLen(str) + 1); if (errNone != err) /* メモリリサイズ失敗? */ { /* エラーなので元に戻す */ FldSetTextHandle(pField, hMem); return err; } } else { /* メモリハンドルが設定されていないので新たに確保する */ hMem = MemHandleNew(StrLen(str) + 1); if (NULL == hMem) /* メモリ確保失敗? */ { return memErrNotEnoughSpace; /* メモリ確保失敗 */ } } /* 確保したメモリハンドルに文字列をコピー */ StrCopy((Char *)MemHandleLock(hMem), str); MemHandleUnlock(hMem); /* メモリハンドルをFieldに設定 */ FldSetTextHandle(pField, hMem); /* Fieldを再描画 */ FldDrawField(pField); return errNone; } |
'04/12/5 新規作成
Copyright (c) 2004 kasa0 All rights reserved.