画面に表示されているラベル等を切り替えたりする場合に、 ソースコード内に文字列データを直接記述する方法もありますが、 リソースとして管理する方が、 修正する場合や他言語版に変更する場合に便利です。
文字列リソースを取得するには、
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 新規作成
Copyright (c) 2006 kasa0 All rights reserved.