そのほかの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!」サイトで入手できますので、参考にしてください。また、今回アニメーション表示のためのキャラクター素材として、サイト「風吹く森のティンベア」のキャラクター「ティンベア」を使用させて頂きました。興味を持った方は、併せてご覧ください。