文字列をリソースで管理する
Top > Tips > etc

画面に表示されているラベル等を切り替えたりする場合に、 ソースコード内に文字列データを直接記述する方法もありますが、 リソースとして管理する方が、 修正する場合や他言語版に変更する場合に便利です。

文字列リソースを取得するには、 DmGetResource関数を使用し、 第1引数に"strRsc"を指定することにより、文字列リソースのリソースハンドルを取得することが出来ます。
リソースは使用が終わったら速やかに DmReleaseResource関数を呼び出して、 リソースハンドルを解放する必要があります。

サンプル画面

ヘッダファイル
#define MainForm        1000
#define StartButton     1001
#define StartString     1002
#define StopString      1003

#define MODE_START      0
#define MODE_STOP       1

リソースファイル
FORM ID MainForm AT (0 0 160 160)
NOFRAME
BEGIN
  TITLE "String Resource"
  BUTTON "Start" ID StartButton AT (CENTER 74 45 25) FONT 0
END

STRING ID StartString "Start"
STRING ID StopString "Stop"

イベントハンドラー
UInt16   buttonMode = MODE_START;

Boolean MainFormHandleEvent(
    EventPtr pEvent)    /* I:イベント */
{
    Boolean     handled = false;
    FormPtr     pForm;
    MemHandle   hMem;

    switch (pEvent->eType)
    {
    case frmOpenEvent:     /* フォームオープンイベント */
        pForm = FrmGetActiveForm();
        FrmDrawForm(pForm);
        handled = true;
        break;

    case ctlSelectEvent:    /* コントロール選択イベント */
        if (StartButton == pEvent->data.ctlSelect.controlID)
        {
            pForm = FrmGetActiveForm();
            FrmHideObject(pForm, FrmGetObjectIndex(pForm, StartButton));

            if (MODE_START == buttonMode)    /* "Start"だった? */
            {
                /* ボタンの文字列を"Stop"に変更 */
                hMem = DmGetResource(strRsc, StopString);
                FrmCopyLabel(pForm, StartButton, MemHandleLock(hMem));
                MemHandleUnlock(hMem);
                DmReleaseResource(hMem);
                buttonMode = MODE_STOP;
            }
            else
            {
                /* ボタンの文字列を"Start"に変更 */
                hMem = DmGetResource(strRsc, StartString);
                FrmCopyLabel(pForm, StartButton, MemHandleLock(hMem));
                MemHandleUnlock(hMem);
                DmReleaseResource(hMem);
                buttonMode = MODE_START;
            }

            FrmShowObject(pForm, FrmGetObjectIndex(pForm, StartButton));
            handled = true;
        }
        break;

    default:
        break;
    }

    return handled;
}

'06/2/15 新規作成