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>
{{edit 更新履歴}}