ウィジェット(Widget)は、単純な機能を実行するための小さなサイズのアプリケーションです。
nexacro platformでは、ウィジェットコンポーネントを提供しませんが、Applicationオブジェクトのopenメソッドを使用して、ウィジェットを実装する方法を提供します。開発者は、ウィジェットで使用するフォームを実装した後、openメソッドを使用してフォームをウィジェットで動作させることができます。
この章では、開発者が nexacro platformでウィジェットを作成、終了する方法と動作する方法について説明します。
ウィジェットの作成
ウィジェットを作成するためには、nexacro platformアプリケーションの実行中 strOpenStyle引数のwidgetプロパティを trueに設定して openメソッドを呼び出します。
nexacro.Application.open("NewWidget", "Base::WidgetMain1.xfdl", null, "", "showontaskbar=false showtitlebar=false showstatusbar=false widget=true", 0, 0, 678, 530, this);
Applicationオブジェクトのopenメソッドの使用法は次のとおりです。詳しくは、nexacro platformリファレンスガイドを参照してください。
application.open(strName, strFormURL, objParentFrame, {objArgumentList}, strOpenStyle, nLeft, nTop[,nWidth, nHeight[, objOpener]])
Layeredウィジェット
ウィジェットの場合には、ウィンドウの形が長方形ではなく、様々な形態が見られる場合が多いです。このような時、layered機能を使用します。 layered機能とは、ウィジェットの外観に該当する領域のみを使用するようにする機能として、nexacro platformでは、プロパティの設定を介して簡単に適用することができます。
ひとつ注意すべき点として、ウィジェットの形に該当する領域のみを使用するために、必ず背景を透明(transparent)に設定する必要があります。
メインフォーム(ウィジェットを作成するフォーム)で openメソッドを呼び出すときに strOpenStyle引数の layeredプロパティを trueに設定します。
nexacro.Application.open("NewWidget", "Base:WidgetMain.xfdl", null, "", "showontaskbar=false showtitlebar=false showstatusbar=false layered=true widget=true", 0, 0, 678, 530, this);
ウィジェットフォーム(例では、WidgetMainを指す)の oninitイベントハンドラでウィジェットフォームの parent frame(openメソッドで生成される child frame)の背景を透明に設定します。
this.WidgetMain_oninit = function(obj:Form, e:nexacro.InitEventInfo) { var parentFrame = this.parent; if (parentFrame.layered == true) { parentFrame.style.set_background("transparent"); } }
単独実行形態のウィジェット
nexacro platformでは、openメソッドを使用して、ウィジェットを生成するため、一般的なウィジェットアプリケーションを実行する場合のように、ウィジェットフォームをアプリケーションのスタートアップフォームとして指定することができません。したがって単独実行形態のウィジェットを生成するには、次のように処理します。
アプリケーションのメインフォーム(例では、AppMainを指す)を生成した後、スタートアップフォームとして指定します。
メインフォームの oninitイベントハンドラでメインフォームのvisibleプロパティをfalseに設定します。
openメソッドを使用して、ウィジェットを生成します。
this.AppMain_oninit = function(obj:Form, e:nexacro.InitEventInfo) { application.mainframe.set_visible(false); nexacro.Application.open("NewWidget", "Base::WidgetMain.xfdl",null, "", " widget=true", 0, 0, 678, 530, this); }
単独実行形態のウィジェットを使用する場合に注意する点は、ウィジェットを終了させてもウィジェットを生成したメインフォームは終了されずに残っているということです。このような場合には、メインフォームを終了する別の手順が必要ですが、詳しくは、ウィジェットの終了を参照してください。
ウィジェットの制御
ウィジェットは、openメソッドを使用して生成されるので、child frameと同じメソッドとプロパティを持っています。
ウィジェットのchild frame取得
ウィジェットのchild frameにアクセスする方法は、アクセスしようとする場所に応じて、メインフォーム(ウィジェットを作成したフォーム)からアクセスする場合とウィジェットフォームからアクセスする場合に分けられます。
メインフォームでウィジェットのchild frameを取得するためには、popupframesプロパティを使用します。popupframesプロパティは、アプリケーションでopenメソッドによってモードレスで生成されたフレームに関する情報をコレクション(collection)の形で含まれているオブジェクトです。開発者は、popupframesオブジェクトとget_itemメソッドを使用して、ウィジェットのchild frameにアクセスすることができます。 get_itemメソッドの呼び出し時の引数として渡されるインデックスあるいはウィジェットの名前は openメソッドの呼び出し時に使用する引数と同じです。
var widgetFrame = nexacro.Application.popupframes.get_item("NewWidget");
ウィジェットフォーム(例では、WidgetMainを指す)から child frameを取得するためには、parentオブジェクトを使用します。
var wigetFrame = this.parent;
ウィジェットの移動とサイズ変更
ウィジェットの位置やサイズを変更するには、ウィジェットの child frameオブジェクトを取得した後、child frameの moveメソッドを使用します。
var widgetFrame = nexacro.Application.popupframes.get_item("NewWidget"); widgetFrame.move(100, 100); widgetFrame.move(100, 100, 200, 500);
ウィジェットプロパティの使用
ウィジェットのプロパティは、child frameプロパティと同じです。したがって、ウィジェットのプロパティにアクセスするには、まず、ウィジェットの child frameオブジェクトを取得した後、そのプロパティを使用します。
var widgetFrame = nexacro.Application.popupframes.get_item(widgetId); if (widgetFrame && widgetFrame.openstatus == “normal”) { widgetFrame.set_openstatus("maximize"); }
ウィジェットメソッドの使用
ウィジェットのメソッドは、child frameメソッドと同じです。したがって、ウィジェットのメソッドを使用するためには、まず、ウィジェットの child frameオブジェクトを取得した後、そのメソッドを使用します。
var widgetFrame = nexacro.Application.popupframes.get_item(widgetId); if (widgetFrame) { widgetFrame.setFocus(); }
var widgetFrame = nexacro.Application.popupframes.get_item(widgetId); var widgetForm = widgetFrame.form; if (widgetForm) { var newButton = new Button("NewButton", "absolute", 10, 10, 110, 100, null, null); if (newButton) { newButton.set_text("NewButton"); widgetForm.addChild("NewButton", newButton); newButton.show(); } }
ウィジェットのための deviceAPI
setIconWidget(widgetId, strWidgetIconPath)
ウィジェットのshowontaskbarプロパティが trueの場合には、タスクバーに表示するアイコンを設定するメソッドです。
Parameter | Type | Description |
---|---|---|
strWidgetId | String | アイコンが設定されるウィジェットの id |
strWidgetIconPath | String | タスクバーに表示するアイコンの URL |
使用例:
nexacro.Application.setIconWidget("NewWidget", “URL(‘Img::Widget_Icon.png’)”); nexacro.Application.setIconWidget("NewWidget", “URL(‘http://localhost:8080/XP13/WidgetTest/Img/Widget_Icon.png’)”);
setTopmostWidget(strWidgetId, bWidgetTopmost)
ウィジェットを画面の最上位に表示するかを設定するメソッドです。
Parameter | Type | Description |
---|---|---|
strWidgetId | String | 画面最上位に表示するかを設定するウィジェットの id |
bWidgetTopmost | Boolean | ウィジェットを画面の最上位に表示するかどうか |
使用例:
nexacro.Application.setTopmostWidget("NewWidget", true);
ウィジェットの終了
一般的に、ウィジェットを終了するには、ウィジェットの child frameオブジェクトにアクセスして、ウィジェットフォームの closeメソッドを呼び出します。
var widgetFrame = nexacro.Application.popupframes.get_item(widgetId); if (widgetFrame && widgetFrame.form) { widgetFrame.form.close(); }
単独実行形態のウィジェットを終了するには、ウィジェットを終了するとき、ウィジェットを作成したアプリケーションも終了させる必要があります。したがって、ウィジェットフォーム(例での WidgetMainを指す)の oncloseイベントハンドラで exitメソッドを呼び出して、アプリケーションを終了します。
this.WidgetMain_onclose = function(obj:Form, e:nexacro.CloseEventInfo) { if(!application.mainframe.visible) { application.exit(); } }