Kuroda Software Service
フレームアプリケーション
  [サイトマップ]

コンテンツ内メニュー

表示モード 全項表示  部分表示



マークの色と認証の関係

一般公開

無料認証

購入認証


認証についての説明

無料アカウント作成フォーム

有料ページ購入フォーム


ほかのコンテンツトップページ

フレームアプリケーション

フレームアプリケーション作成時の注意点

● フレームアプリケーションへの挑戦

フレーム構成のアプリケーションを簡単に実現できることは、HTMLアプリケーションの大きなメリットのひとつです。これをC++とWIN32APIで実現しようとすると、恐ろしく手間のかかったコードとなりますが、HTMLアプリケーションの場合は、HTMLページと同じ手法でフレーム構成のアプリケーションを作成できます。

● フレームアプリケーションのメリット

アプリケーションをフレーム構成する最大のメリットは、フレームの一部(主にGUI部分)をサーバーからのレスポンスとすることによって、WEBアプリケーション化することにあります。さらにHTBOXサーバーのサーバーサイドエンコーダーを用いれば、HTTP経由のHTMLレスポンスでありながら、スクリプトソースを隠蔽したクライアント実行が可能となります。

このことにより、機能制限した試用版を公開し有料版への移行を促すといった従来のビジネスモデルではなく、フルスペックの製品をフリーバージョンとして公開した後に、利用の状況を監視しながら有料サービスへ移行することが可能となります。つまり、サーバーサイドに置いたひとつのファイルで稼働中のアプリケーションをコントロールできるのです。HTABOXシステムの目指す最終形態がここにあります。

● CreateDlgWindow関数

今までのサンプルに使用してきたCreateHtaWindowは、生成後にWIN32オブジェクトを追加することしかできません。したがってwindow.onloadが発生する前にWIN32オブジェクトを認識させることはできません。それに対しCreateDlgWindow関数は、HTMLダイアログとして生成されますので、引数として指定したWIN32オブジェクトをHTMLの生成初期から認識させることができます。

これにより、HTML側からWIN32オブジェクト経由でHTABOXコア内部のスクリプトパース状況を確認することができます。まだパースが完了していない場合は待機関数で構築を待ち、完了であれば初期化関数を呼び出します。このロジックはあらゆる状況下でHTML側とHTABOXコア側の確実な同期を実現します。フレーム構成のアプリケーションの場合は、HTMLファイルが全てローカルにある、一部がURL上にある、それが基本認証エリアにある、さらにHTABOXサーバーでエンコードされている、という複数の状況での動作を想定しなければならないからです。

         下記HTMLファイルは、サンプルフォルダにFrame.htmとして存在します。

<html>

<head>

<title>Frame</title>

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">

<script language="jscript">

//引数オブジェクトはWIN32である

var WIN32 = window.dialogArguments;

//WIN32インスタンスのパース完了を待機してInitialize()を呼び出す

function WaitLoop()

{

    //パース完了でなければ一定間隔をおいて自身を呼び出す

    if(WIN32.DONE == false) setTimeout("WaitLoop()", 100);

    else WIN32.Initialize();

}

//フレーム構築後待機関数を呼び出す

window.onload = function(){WaitLoop();}

</script>

</head>

<frameset rows="30%,70%">

  <frame name="Top" src="top.htm" application="yes">

  <frame name="Bottom" src="bottom.htm" application="yes">

  <noframes>

  </noframes>

</frameset>

</html>

         下記HTMLファイルは、サンプルフォルダにTop.htmとして存在します。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

<title></title>

<style type="text/css">

p{font-family:'MS ゴシック';font-size:11pt}

</style>

</head>

<body bgcolor="menu">

<input type="file" id="File1" style="display:none">

<table id="MENU">

  <tr>

    <td>終了</td>

    <td>ファイル</td>

    <td>表示</td>

  </tr>

  <tr>

    <td onclick="window.close();">終了</td>

    <td onclick="FileOpen();">ファイルを開く</td>

    <td onclick="Cls();">表示のクリア</td>

  </tr>

</table>

<p align="center">メニューからテキストファイルを選んでください。</p>

<p align="center">下のフレームに内容を表示します。</p>

</body>

</html>

● 下記HTMLファイルは、サンプルフォルダにBottom.htmとして存在します。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">

<title></title>

</head>

<body bgcolor="menu">

<pre id="CONSOLE" style="color:white;background-color:black;padding:8px"></pre>

</body>

</html>

● 下記ソースコードは、サンプルフォルダにFrame.jsとして存在します。

/*--------------------------------------------------------------------------------

・ フレーム形式アプリケーションサンプル

   上フレームメニューでファイルを選択し下フレームへ内容TEXTを表示する。

 

--------------------------------------------------------------------------------*/

var WIN32;

//#define WIN32 //

WIN32 = new ActiveXObject("HTABOX.Application");

WIN32.ScriptFullName = WSH.ScriptFullName;

//#undef WIN32

WIN32.DONE = false;

 

var DIR  = WIN32.GetScriptDirectory();

var DLG  = WIN32.CreateDlgWindow(DIR + "\\frame.htm", WIN32);

var SCR  = DLG.Script;

var HWND = DLG.FraHwnd;

 

//子フレームスクリプトインスタンス

var TOP;

var BOTTOM;

 

//初期化関数

function Initialize()

{

    //メニュー生成

    DLG.BuildMenu();

    //子フレームスクリプトインスタンス取得

    TOP    = SCR.frames[0].document.Script;

    BOTTOM = SCR.frames[1].document.Script;

   

    //上フレームスクリプトへ関数を隠蔽追加

    TOP.FileOpen = WIN32.HideFunc(FileOpen);

    TOP.Cls      = WIN32.HideFunc(Cls);

}

//WIN32インスタンスへ初期化関数を隠蔽追加

WIN32.Initialize = WIN32.HideFunc(Initialize);

 

//--------------------------------------------------------------------------------

//Scripting.FileSystemObject定数

var ForReading         =  1;

var ForWriting         =  2;

var ForAppending       =  8;

var TristateTrue       = -1;

var TristateFalse      =  0;

var TristateUseDefault = -2;

var TristateMixed      = -2;

var FSO = new ActiveXObject("Scripting.FileSystemObject");

//下フレーム文字列表示関数

function Println(str)

{

    BOTTOM.CONSOLE.insertAdjacentText("beforeEnd", str + "\n");

}

//下フレーム表示文字列の消去

function Cls()

{

    BOTTOM.CONSOLE.innerText = "";

}

//ファイルダイアログのパスをTEXTとして表示

function FileOpen()

{

    TOP.File1.click();

    var path = TOP.File1.value;

    Println(path + "が選択されました\n");

    if(FSO.FileExists(path))

    {

        var ptr = FSO.OpenTextFile(path, ForReading, false, TristateFalse);

        Println(ptr.ReadAll());    ptr.Close();

    }

}

 

//スクリプトのパース完了フラグ

WIN32.DONE = true;

 

//アプリケーション終了を待機

DLG.Show(); WIN32.WiteForWindowVisible(HWND);

WIN32.MsgBox("正常終了");

 

 

お問い合わせ
©クロダ ソフトウェア サービス programmed by hidebou