そのほかのHSPの活用法
HSPの別な利用方法として、他のアプリケーションやコマンドラインツールとの橋渡しを行うための簡易ツールや、フィルタなどへの応用が挙げられます。ここでは、2つの例を紹介しましょう。
Excelアプリケーションとの連携
HSP3から、COMコンポーネント呼び出しが標準サポートされたことで、DLLが提供するAPIだけでなく、COMコンポーネントによって提供されているAPIを利用できるようになりました。COMコンポーネント自体は、Visual BasicやJava Scriptなどでも扱うことできますが、画像やファイルの取り扱いや、スタンドアローンアプリケーションを手軽に作成できるというHSP自体の特性と組み合わせることで、違った活用法も出てくると思います。
ここでは、Microsoft Excelのデータファイル(test.xls)を、Excelコンポーネントを使用して読み出すサンプルを紹介します。
;
; xlsのデータを取得する
;
myname = "test.xls"
fname = dir_cur+"\\"+myname ; フルパスを作成する
;
newcom xlApp, "Excel.Application"
xlApp("Visible") = 0 ; Excelウィンドウは非表示
xlApp("DisplayAlerts") = 0 ; 警告メッセージを表示させない
xlBooks = xlApp("Workbooks") ; Workbooks コレクション取得
xlBooks->"Open" fname ; 指定ファイルを開く
xlBook = xlBooks("Item",myname) ; book取得
xlSheet = xlBook("Worksheets","Sheet1") ; Sheet取得
xlRange = xlSheet("Range","A1")
xlCurReg = xlRange("CurrentRegion")
xlRows = xlCurReg("Rows")
xlColumns = xlCurReg("Columns")
sy = 0+xlRows("Count") ; 縦の項目数を取得
sx = 0+xlColumns("Count") ; 横の項目数を取得
repeat sy:y=cnt
repeat sx:x=cnt
xlCur = xlRange("Offset",y,x) ; X,Yのセルを取得
data = xlCur("Text") ; 内容テキストを取り出す
mes "("+x+","+y+")="+data ; 表示する
loop
loop
; COMのあとしまつ
delcom xlCur : delcom xlColumns : delcom xlRows
delcom xlCurReg : delcom xlRange : delcom xlSheet
delcom xlBook
xlBooks->"Close" : delcom xlBooks
xlApp->"Quit" : delcom xlApp

newcom命令により、ExcelのプログラムIDである"Excel.Application"を指定することで、Excelコンポーネントが持つ各種機能を利用できるようになります。
このサンプルでは、有効なセルの範囲を変数sx,syに読み出した後、すべてのセル内容をmes命令によって画面上に表示しています。COMの内部では、文字コードとしてUnicode形式が使用されていますが、HSPで扱う場合には内部で自動的にSJIS形式に変換されます。これにより、Excelで作成したデータを別な形式に変換したり、Excelと連携して動作するアプリケーションの作成など、さまざまな応用が可能です。
IEコンポーネントを使用したWebブラウザの作成
続いて、COMコンポーネントを活用した例として、Webブラウザのサンプルを紹介します。これは、Windowsに含まれるIEコンポーネントをHSPのウィンドウ内に呼び出すことで実現しています。
;
; IEコンポーネントを使ったブラウザ
;
#define DIID_DWebBrowserEvents2 "{34A715A0-6587-11D0-924A-0020
AFC7AC4D}"
#define DISPID_NAVIGATECOMPLETE2 252
cls 1
sdim url,512
url="http://codezine.jp/"
objsize 600,24
pos 0,2:mes "URL:"
pos 0,26:mes "WEB Browser Sample"
pos 40,0:input url
objsize 120,24
pos 520,24:button "移動",*wow
pos 400,24:button "進む",*go_f
pos 280,24:button "戻る",*go_b
pos 0,48
axobj ie, "Shell.Explorer.2",640,480-48
num=stat
comevent ie_event, ie, DIID_DWebBrowserEvents2, *event
ie->"Navigate" url
*main
stop
*event
; COMイベント処理
dispid = comevdisp(ie_event)
if dispid = DISPID_NAVIGATECOMPLETE2 : gosub *OnNavigateComplete2
return
*OnNavigateComplete2
name = ie("LocationURL")
objprm 0,name
pDoc = ie("Document")
name = pDoc("Title")
title name
delcom pDoc
return
*wow
ie->"Navigate" url
goto *main
*go_f
ie->"GoForward"
goto *main
*go_b
ie->"GoBack"
goto *main
サンプルでは、デフォルトでCodeZineのトップページを表示します。画面サイズは狭いですが、これだけで一通りの機能を持ったブラウザとして動作します。URLを入力して[移動]ボタンを押すことで、任意のサイトを表示することができ、[進む][戻る]などのボタンで履歴を呼び出すことも可能です。
このように、各種ActiveXコンポーネントをaxobj命令により配置できるほか、COMイベントなどの割り込み動作に対応することができます。
最後に
プログラミング初心者の方には、まだ意味が分からない部分も多いかもしれません。しかし、結果を想像しながらいろいろとスクリプトをいじって実行してみることで、やがて全体が見えてくるはずです。
今回、紹介したサンプルはどれも基本的な動作をするだけのシンプルなものです。これを参考にして、自分なりに改造することで、いろいろなヒントが見えてくると思います。HSPによって、実践的なプログラミングの世界を楽しんでもらえれば嬉しいです。
参考サイト
HSPのダウンロードをはじめ、掲示板やメルマガ、技術資料など、多くの情報が「HSPTV!」サイトで入手できますので、参考にしてください。また、今回アニメーション表示のためのキャラクター素材として、サイト「風吹く森のティンベア」のキャラクター「ティンベア」を使用させて頂きました。興味を持った方は、併せてご覧ください。

AFC7AC4D}"
#define DISPID_NAVIGATECOMPLETE2 252
cls 1
sdim url,512
url="http://codezine.jp/"
objsize 600,24
pos 0,2:mes "URL:"
pos 0,26:mes "WEB Browser Sample"
pos 40,0:input url
objsize 120,24
pos 520,24:button "移動",*wow
pos 400,24:button "進む",*go_f
pos 280,24:button "戻る",*go_b
pos 0,48
axobj ie, "Shell.Explorer.2",640,480-48
num=stat
comevent ie_event, ie, DIID_DWebBrowserEvents2, *event
ie->"Navigate" url
*main
stop
*event
; COMイベント処理
dispid = comevdisp(ie_event)
if dispid = DISPID_NAVIGATECOMPLETE2 : gosub *OnNavigateComplete2
return
*OnNavigateComplete2
name = ie("LocationURL")
objprm 0,name
pDoc = ie("Document")
name = pDoc("Title")
title name
delcom pDoc
return
*wow
ie->"Navigate" url
goto *main
*go_f
ie->"GoForward"
goto *main
*go_b
ie->"GoBack"
goto *main
