SophiaFramework UNIVERSE 5.3 |
SFYFrame を継承するレスポンダを『フレーム』と呼びます。
SFYResponder::SetFrame 関数を使用してフレームをレスポンダに装着することにより、 枠線やタイトルなどの枠組みをレスポンダに表示することが可能になります。
フレーム装着の対象となるレスポンダは、 以下の 3 種類です。
フレームには、以下の 3 種類があります。
注意 | |
---|---|
フレームのヘッダー部分にタイトルを付けることも可能です。 |
■ フレームの使い方
注意 | |
---|---|
このとき、レスポンダに装着したフレームを『アタッチメントフレーム』、 フレームが装着されたレスポンダを『コンテントレスポンダ』と呼びます。 |
Tip | |
---|---|
もう片一方の実領域は、 アタッチメントフレームのフレーム余白領域のサイズから計算して自動的に設定されます。 SFYResponder::SetFrame 関数の内部では、 コンテントレスポンダの実領域をフレーム余白領域のサイズだけ拡大した領域をアタッチメントフレームの実領域に設定する処理も行います。 そのため、コンテントレスポンダの実領域の設定は、 SFYResponder::SetFrame 関数の呼び出しよりも前に行うことも可能です。 |
Tip | |
---|---|
同一フレームを様々なレスポンダに装着するために、 装着対象レスポンダに関わるプロパティをフレームに持たせないことを推奨します。 |
注意 | |
---|---|
コンテントレスポンダとアタッチメントフレームについての詳細は、 こちらを参照してください。 |
■ フレームクラスの種類
すべてのフレームクラスは SFYFrame を継承し、 フレーム用余白領域のサイズを計算したり、 枠線やタイトルなどを設定したり、 自分自身を描画する機能を提供します。
具象フレームクラスはアプリ開発ですぐに使うことができる部品であり、 抽象フレームクラスはカスタマイズされたユーザー定義フレームクラスを作成するための起点(基底クラス)となります。
表 9.20. 具象フレームクラスの種類
クラス名 | 解説 |
---|---|
SFZPlainFrame | プレーンフレームです。 |
SFZFlatFrame | フラットフレームです。 |
SFZBevelFrame | ベベルフレームです。 |
SFZTitlePlainFrame | タイトル付きプレーンフレームです。 |
SFZTitleFlatFrame | タイトル付きフラットフレームです。 |
SFZTitleBevelFrame | タイトル付きベベルフレームです。 |
重要 | |||||
---|---|---|---|---|---|
具象フレームクラスでは、 SFYResponder::SetState 関数の呼び出しは必須です。 通常、可視、活性、操作可能、フォーカスの状態は、 すべて "true" に設定します。 その他の関数の呼び出しは省略可能です。 フレームは、SFYResponder::SetFrame 関数を使用してレスポンダに装着することを推奨します。 コンテントレスポンダの SFYResponder::SetRealBound 関数を呼び出すと、 アタッチメントフレームの実領域は自動的に設定されます。 逆に、アタッチメントフレームの SFYResponder::SetRealBound 関数を呼び出すと、 コンテントレスポンダの実領域が自動的に設定されます。
|
表 9.21. 抽象フレームクラスの種類
クラス名 | 解説 |
---|---|
SFYFrame | フレームの抽象クラスです。 |
SFYPlainFrame | プレーンフレームの抽象クラスです。 |
SFYFlatFrame | フラットフレームの抽象クラスです。 |
SFYBevelFrame | ベベルフレームの抽象クラスです。 |
例 9.86. 宣言
SFMTYPEDEFCLASS(USRApplication) class USRApplication: public SFYApplication { SFMSEALCOPY(USRApplication) private: SFZTitleBevelFrameSmp _frame; SFZMessageDialogSmp _dialog; // ...(省略)... private: SFCError MakeFrame(Void); SFCError MakeDialog(Void); // ダイアログ選択結果イベントを受信するハンドラ XANDLER_DECLARE_VOIDRESULT(OnResult) };
例 9.87. 実装
// フレームの作成 SFCError USRApplication::MakeFrame(Void) { SFCError error(SFERR_NO_ERROR); // タイトル付きベベルフレームの生成(フレームの種類によってデザインが異なる) // 他のフレームについても同様にしてウィンドウやダイアログに枠組みを設定できる if ((_frame = SFZTitleBevelFrame::NewInstance(&error)) != null) { // フレームの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する _frame->SetState(true, true, true, true); // その他フレームの設定 // ...(省略)... } if ( error == SFERR_NO_ERROR) { // フレーム付きダイアログを作成し表示する error = MakeDialog(); } return error; } // フレーム付きダイアログの作成と表示 SFCError USRApplication::MakeDialog(Void) { SFXRectangle rectangle; SFXMargin margin; SFCError error(SFERR_NO_ERROR); // ダイアログの生成 if ((_dialog = SFZMessageDialog::NewInstance(&error)) != null) { // ダイアログの親レスポンダをルートに設定する error = _dialog->SetParent(GetThis()); if (error == SFERR_NO_ERROR) { // ダイアログにフレームを装着する error = _dialog->SetFrame(_frame); if (error == SFERR_NO_ERROR) { // ダイアログ選択結果イベントを受信するハンドラを登録する error = _dialog->RegisterHandler( SFXEventRange(SFEVT_RESPONDER_RESULT, SFEVT_RESPONDER_RESULT, SFP16_BEGIN, SFP16_END), XANDLER_INTERNAL(OnResult) ); if (error == SFERR_NO_ERROR) { // メッセージ部分に表示するテキストを設定する error = _dialog->SetMessageText("in\nSFZTitleBevelFrame\n\nThis is a notification message."); if (error == SFERR_NO_ERROR) { // OK ボタン部分に表示するテキストを設定する error = _dialog->SetButtonText("OK"); if (error == SFERR_NO_ERROR) { // フレームのタイトルを設定する error = _frame->SetText("SFZTitleBevelFrame"); if (error == SFERR_NO_ERROR) { // 携帯画面領域を (10, 10) だけ縮小した領域をヒント領域として // フレームに最適な領域を求めてヒント領域内に中央配置(CENTER-MIDDLE)し、 // その領域をフレームの実領域に設定する // ※自動的にフレームの実領域をフレーム余白領域だけ縮小した領域がダイアログの実領域に設定される _frame->SetRealBound(_frame->GetSuitableBound(GetLocalBound().Deflate(10, 10), SFYResponder::HORIZONTAL_CENTER, SFYResponder::VERTICAL_MIDDLE)); // ダイアログの状態を「可視+活性+操作可能+フォーカス」にまとめて設定する _dialog->SetState(true, true, true, true); // ダイアログを最前面に移動する // ※自動的にフレームも最前面に移動する _dialog->ToFront(); } } } } } } } return error; } // ダイアログ選択結果イベントを受信するハンドラ XANDLER_IMPLEMENT_VOIDRESULT(USRApplication, OnResult, invoker, reason, result) { // invoker にはダイアログが渡される // reason には結果イベントの P16 値が渡される // result には 0 が渡される switch (reason) { case SFP16_RESULT_OK: // OK ボタン押下時、または操作キー押下時 // ...(省略)... break; case SFP16_RESULT_ESCAPE: // ESCAPE キー押下時、またはScheduleTimer 関数で設定した時間が経過した時 // ...(省略)... break; } // ダイアログだけを閉じる // ※自動的にフレームはダイアログから切り離されて見えなくなる invoker->Terminate(); return; }
注意 | |
---|---|
SFYResponder::Terminate 関数を呼び出してコンテントレスポンダを終了すると、 アタッチメントフレームはコンテントレスポンダから切り離されて見えなくなり、 他のレスポンダに装着可能な通常のフレームに戻ります。 逆に、アタッチメントフレームを終了した場合は、 アタッチメントフレームだけが見えなくなるだけです。 コンテントレスポンダはそのままです。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |