HTA
HTAメモの目次
HTAってなに?
HTA(HTML Applications)とは、文字通りHTMLで作成するアプリケーションです。通常のHTMLではブラウザが立ち上がりますが、HTAではフォームが立ち上がり通常のアプリケーションのように動作します。HTAによりInternet Explorerのテクノロジを最大限に利用したアプリケーションを構築できます。
早速使ってみようや
HTAを作るのは非常に簡単で、今まで私たちが培ってきたDHTMLの技術がそのまま生かせます。既存のHTMLファイルの拡張子を .hta に変更するだけで、HTAになります。機能の実装はさておき、HTAを実行(ダブルクリック)してブラウザとの違いを確かめてみましょう。
身近にHTMLがない場合は、メモ帳を開いて Hello World! と書いてHelloWorld.hta とでも名前を付けて保存しましょう。
<HTA:APPLICATION>タグ
HTMLファイルの<HEAD></HEAD>間にこの<HTA:APPLICATION>タグを記述します。このタグは省略可能でその場合はデフォルトの設定が使われます。主にアプリケーションの見栄えと振る舞いを定義します。
HTAのサンプル
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>HTAの実験</TITLE> <HTA:APPLICATION APPLICATIONNAME = "HTA_Sample" BORDER = "dialog" BORDERSTYLE = "normal" CAPTION = "yes" CONTEXTMENU = "no" ICON = "htasamp.ico" ID = "oCheck" INNERBORDER = "no" MAXIMIZEBUTTON = "no" MINIMIZEBUTTON = "yes" NAVIGABLE = "yes" SCROLL = "no" SCROLLFLAT = "yes" SELECTION = "no" SHOWINTASKBAR = "yes" SINGLEINSTANCE = "no" SYSMENU = "yes" VERSION = "1.0.0" WINDOWSTATE = "normal" /> </HEAD> <BODY bgcolor="#CCCCCC"> これがHTAだ!どんなもんだい! <INPUT type="button" value="閉じる" onClick="VBScript:Window.Close"> </BODY> </HTML>
実際には、ここまで属性を設定する必要はありません。デフォルトから変更があるもののみでいいでしょう。
あまり重要ではありませんが、ICON属性はアイコンファイル名を指定します。指定したアイコンがない場合や指定しなかった場合は、HTAのデフォルトアイコンが使われます。アイコンはWindows付属ペイント簡単に作れますので、自分の開発したソフト用に作っておきましょう。アイコンの簡単な作り方
HTAタグの詳しい情報はMSDNにありますので参考に。http://msdn.microsoft.com/library/default.asp?url=/workshop/author/hta/reference/objects/hta.asp
Windowの初期サイズ
悲しいかなAPPLICATIONタグでは細かいWindowサイズが指定できません。これって、ちょっといけず〜と思ってしまいました。基本的には、APPLICATIONタグで指定するのはDHTMLで操作できない部分の属性らしいです。初期サイズを設定するなら、<BODY>タグのonLoadイベントにリサイズ命令を書きます。
<BODY onLoad="VBScript:Window.ResizeTo 320,240">
ここまで来ると創作意欲が沸きますなぁ・・・。
あとはDHTMLで
DHTML+α殆どのことが可能になります。HTAではFileSystemObjectが利用できるので、入力をテキストファイルに書き出したりとか、色々なことが可能です。結局のところ、IEの機能を使ったローカルアプリケーションですので、コントロールを貼り付けたりしてもいいです。トグルボタンとかスピンボタンとかカレンダーとか・・・。
サンプルアプリ
ちょっとまだ製作途中でショボイですが、HTAのサンプルを載せておきます。(アプリというのもおこがましいのですが)現在(2004.08.25)のところ、ファイル選択してMDBを最適化できる機能をもたせました。ちょっとだけ実用的です。最終的にどのようなアプリになるのか不明・・・。
ファイル選択ダイアログ部をエクセルのダイアログを利用するように作り変えました(2004.01.15)。エクセルが入っていないと動作しません。
適当なファイル名(hoge.hta)などとして保存してからダブルクリックするか、hta02.hta をダウンロードしてください。
<HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>HTA+ADO+MDBでサンプル</TITLE> <HTA:APPLICATION APPLICATIONNAME = "HTA_ADO_MDB" BORDER = "dialog" BORDERSTYLE = "normal" CAPTION = "yes" CONTEXTMENU = "no" ICON = "htasamp.ico" ID = "oCheck" INNERBORDER = "no" MAXIMIZEBUTTON = "no" MINIMIZEBUTTON = "yes" NAVIGABLE = "yes" SCROLL = "no" SCROLLFLAT = "yes" SELECTION = "no" SHOWINTASKBAR = "yes" SINGLEINSTANCE = "no" SYSMENU = "yes" VERSION = "1.0.2" WINDOWSTATE = "normal" /> <STYLE> BODY { background: #CCC; } </STYLE> <SCRIPT Language="VBScript"> Option Explicit ' Application開始時イベント Sub Window_OnLoad Window.ResizeTo 320,240 cmdCreateMDB.value = "MDBを作成" cmdCompactMDB.value = "MDBの最適化" cmdClose.value = "閉じる" End Sub '作成ボタンのクリックイベント Sub cmdCreateMDB_OnClick Dim strPath strPath = SaveAsFileDialog Dim objFS Set objFS = CreateObject("Scripting.FileSystemObject") If objFS.FileExists(strPath) Then MsgBox strPath & "は既に存在します。" & vbCrLf & _ "違うファイル名で再度トライしてください。", vbCritical Exit Sub End If If strPath <> "" Then createMDB strPath MsgBox strPath & "を作成しました" End If End Sub '最適化ボタンのクリックイベント Sub cmdCompactMDB_OnClick Dim strPath strPath = OpenFileDialog If strPath = "" Then Exit Sub Dim objFS, objFile Set objFS = CreateObject("Scripting.FileSystemObject") Set objFile = objFS.GetFile(strPath) objFile.Name = objFile.Name & ".old.mdb" Set objFS = Nothing Dim strOld, strNew Dim objJRO strOld = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ".old.mdb" strNew = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath Set objJRO = CreateObject("JRO.JetEngine") objJRO.CompactDatabase strOld, strNew Set objJRO = Nothing MsgBox strPath & "を最適化しました" & vbCrLf & _ "元ファイルは" & strPath & ".old.mdb にリネームしました" End Sub '閉じるボタンのクリックイベント Sub cmdClose_OnClick Window.Close End Sub ' MDB作成 Sub createMDB(strPath) Dim objCat Set objCat = CreateObject("ADOX.Catalog") objCat.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath Set objCat = Nothing End Sub ' ファイル名を入力するダイアログ Function SaveAsFileDialog Dim objExcel Set objExcel = CreateObject("Excel.Application") Dim File File = objExcel.GetSaveAsFilename( _ "新しいデータベース", "Jet4.0 DB File (*.mdb),*.mdb") If File = False Then Exit Function SaveAsFileDialog = File Set objExcel = Nothing End Function ' ファイルを選択するダイアログ Function OpenFileDialog Dim objExcel Set objExcel = CreateObject("Excel.Application") Dim File File = objExcel.GetOpenFilename( _ "Jet4.0 DB File (*.mdb),*.mdb", , "ファイルを選択してください") If File = False Then Exit Function OpenFileDialog = File Set objExcel = Nothing End Function </SCRIPT> </HEAD> <BODY> <P><INPUT type=button name=cmdCreateMDB></P> <P><INPUT type=button name=cmdCompactMDB></P> <P><INPUT type=button name=cmdClose></P> </BODY> </HTML>