Frame Tree

この章では、フォームの相互関係をもう少し具体的に図式化して説明します。

表記法

フレームの相互関係を図式化する際に使用する表記法を説明します。

ボックス

コレクション上の項目です。ここの’Item’という文字は実際の名前とは関係ありません。

連結線

1:1の連結、菱形の方が子になります。

1:Nの連結、円の方が子になります。

説明

上の表記は以下のような意味です。

用語の定義

用語

説明

エレメント

コンポーネントのプロパティ、メソッド、イベントを総称してコンポーネントのエレメントと言います。

共通で使用するSyntax

フォーム

関係図

スクリプトの例示画面

インデックスの順序をbtn0, btn1, cmb0, dtset1, bind1, div0, div1と仮定します。

1つのフォームの中の同レベルでは、idが重複してはなりません。しかし、btn0とdiv0_btn0とdiv2_btnは同レベルではないので、同じidで指定しても差し支えありません。

コンポーネント / invisibleオブジェクト / bindのスクリプトアクセス

this.classname == "frm0"
this.name == "frm0"
this.all["btn0"].name == "btn0"
this.all[0].name == "btn0"
this.btn0.name == "btn0"
this.components[0].name == "btn0"
this.components["btn0"].name == "btn0"
this.all["dtset1"].name == "dtset1"
this.all[3].name == "dtset1"
this.dtset1.name == "dtset1"
this.objects[0].name == "dtset1"
this.objects["dtset1"].name == "dtset1"
this.all.length == 7
this.components.length == 5 //btn0, btn1, comb0, div0, div1
this.binds.length == 1

コンテナコンポーネントへのスクリプトアプローチ

フォームがないコンテナコンポーネントはinvisibleオブジェクトとbindを持つことができず、コンポーネントのみ持つことができます。

this.div0. btn0.name== "div0_btn0"
this.div0.all[0]. name == "div0_btn0"
this.components[3].components[0]. name == "div0_btn0"
this.div0.div2.div2_btn0.name == "div2_btn0"
this.all["div0"].all["div2"].all["div2_btn0"].name == "div2_btn0"
this.components["div0"].components["div2"].components["div2_btn0"].name == "div2_btn0"

フォームを乗せたコンテナコンポーネントへのスクリプトアプローチ

this.name== "div1" // この値は、フォームを乗せたコンテナコンポーネントのidであるため、値が可変的です。
this.btn0.name== this.all["btn0"].name == "btn0"
this.name == "frm0"
this.div1.btn0.name == "btn0" //"frm1"を含んでいる"div1"でのみアクセスすることができます。

親スクリプトの使用

this.div1.dtset2.parent.parent.classname == "frm0"
this.div1.dtset2.parent.name == "div1"// frm1はdiv1に乗ることによってその特性を失います。
this.div1.dtset2.parent.classname == undefined// frm1はdiv1に乗せながらその特性を失い、classnameが存在しなくなります。
this.div1.dtset2.parent.name == "div1"

コンテナコンポーネントのエレメントの使用

フォームを持ったコンテナコンポーネントは、フォームのようにコンポーネント、invisibleオブジェクト、bind(以下、エレメント)を持つことができます。

フォームを持たないコンテナコンポーネントはinvisibleオブジェクトとbindを持つことができず、コンポーネントのみ持つことができます。

コンテナ機能のないコンポーネント、invisibleオブジェクト、bindはエレメントを持つことができません。

コンテナコンポーネントは乗せられたフォームの特性を持つようになります。

シングルフレーム形式のアプリケーション

関係図

フォーム内のコンポーネント / bind / invisibleオブジドェクトは.getOwnerFrame()ですが、.getOwnerForm()はありません。

スクリプトの例示画面

シングルフレームの場合には、MainFrameはChildFrameとTabFrameの中から1つだけ持つことができます。

applicationからフォームのスクリプトアクセス

application.mainframe.frame.form.name =="frm0"
application.mframe0.frame.form.name == "frm0"
application.mframe0.chdframe0.form.name == "frm0"
application.all[0].all[0].form.name == "frm0"
application.all["mframe0"].all["chdframe0"].form.name == "frm0"
mainframe.frame.form.name == "frm0"
application.mainframe.frame.tabframepages[0].form.name == "frm1"
application.mainframe.frame.tabframepages["tabframeP0"].form.name == "frm1"
application.all[0].all[0].all[0].form.name == "frm1"
application.all["mframe0"].all["tabframe0"].all["tabframeP0"].form.name == "frm1"

formからapplicationのスクリプトアクセス

this.parent.name == "chdframe0"
this.parent.parent.name == "mframe0"
this.getOwnerFrame().getOwnerFrame().name == "mframe0"
this.getOwnerFrame().getOwnerFrame().parent.mainframe.name == "mframe0"
this.parent.name == "tabframeP0"
this.parent.parent.name == "tabframe0"
this.parent.parent.parent.name == "mframe0"
this.getOwnerFrame().getOwnerFrame().getOwnerFrame().name == "mframe0"

マルチフレーム形式のアプリケーション

関係図

スクリプトの例示画面

frameset_nのそれぞれのフレームセットは、"frameset0"の構造を持つことができます。

frames[]を除いてはシングルフレームと同一方法でアクセスします。

applicationからformのスクリプトアプローチ

application.mainframe.frame == application.mainframe.frameset0
application.mainframe.frame.chdframe0.form.name== "frm1" //
application.mainframe.frame.frames[0].form.name == "frm1"
application.mainframe.frame.frames["chdframe0"].form.name == "frm1"
application.mainframe.frame.frames[1].tabframepages[0].form.name == "frm1"

Modal、Modaless形式のフォーム

関係図

入れ子ChildFrameでのスクリプトの使用法

// ********** ChildFrameを生成します。***************
var frameobj = new ChildFrame("childfrm0", 10, 10, 100, 100, "url");
もしくは
var frameobj = new ChildFrame("childframe");
frameobj.init ("childframe", 10, 10, 100, 100);

// ********** ChildFrameをフォームセットに連結します。 **********
mainframe.frameset.addChild("chd0", frameobj);
もしくは
frameset.inertChild(1, "chd0", frameobj);

// ********** ChildFrameを画面に出力します。**********
frameobj.show();

// ********** ChildFrameを画面から削除します。 **********
mainframe.frameset.removeChild("chd0");
frameobj.destroy();
frameobj = null;

modal/modalessチャイルドフレームでのスクリプトの使用法

var frameobj = new ChildFrame("childfrm0", 10, 10, 100, 100, "url");
もしくは
var frameobj = new ChildFrame("childframe");
frameobj.init ("childframe", 10, 10, 100, 100);
var parentframeobj = mainframe.frameset.ChildFrame0;
frameobj.showModal(parentframeobj);
もしくは
frameobj.showModeless(parentframeobj);