SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

HSP入門

HSPで作るショートプログラムの実践例

ゲームや実務補助に適した簡易プログラムの製作


  • X ポスト
  • このエントリーをはてなブックマークに追加

そのほかのHSPの活用法

 HSPの別な利用方法として、他のアプリケーションやコマンドラインツールとの橋渡しを行うための簡易ツールや、フィルタなどへの応用が挙げられます。ここでは、2つの例を紹介しましょう。

Excelアプリケーションとの連携

 HSP3から、COMコンポーネント呼び出しが標準サポートされたことで、DLLが提供するAPIだけでなく、COMコンポーネントによって提供されているAPIを利用できるようになりました。COMコンポーネント自体は、Visual BasicやJava Scriptなどでも扱うことできますが、画像やファイルの取り扱いや、スタンドアローンアプリケーションを手軽に作成できるというHSP自体の特性と組み合わせることで、違った活用法も出てくると思います。

 ここでは、Microsoft Excelのデータファイル(test.xls)を、Excelコンポーネントを使用して読み出すサンプルを紹介します。

excel.hsp
;
; 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
実行結果(excel.hsp)
実行結果(excel.hsp)

 newcom命令により、ExcelのプログラムIDである"Excel.Application"を指定することで、Excelコンポーネントが持つ各種機能を利用できるようになります。

 このサンプルでは、有効なセルの範囲を変数sx,syに読み出した後、すべてのセル内容をmes命令によって画面上に表示しています。COMの内部では、文字コードとしてUnicode形式が使用されていますが、HSPで扱う場合には内部で自動的にSJIS形式に変換されます。これにより、Excelで作成したデータを別な形式に変換したり、Excelと連携して動作するアプリケーションの作成など、さまざまな応用が可能です。

 このサンプルスクリプトは、Excel 2000により動作検証を行っています。
 

IEコンポーネントを使用したWebブラウザの作成

 続いて、COMコンポーネントを活用した例として、Webブラウザのサンプルを紹介します。これは、Windowsに含まれるIEコンポーネントをHSPのウィンドウ内に呼び出すことで実現しています。

web.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
実行結果(web.hsp)
実行結果(web.hsp)

 サンプルでは、デフォルトでCodeZineのトップページを表示します。画面サイズは狭いですが、これだけで一通りの機能を持ったブラウザとして動作します。URLを入力して[移動]ボタンを押すことで、任意のサイトを表示することができ、[進む][戻る]などのボタンで履歴を呼び出すことも可能です。

 このように、各種ActiveXコンポーネントをaxobj命令により配置できるほか、COMイベントなどの割り込み動作に対応することができます。

最後に

 プログラミング初心者の方には、まだ意味が分からない部分も多いかもしれません。しかし、結果を想像しながらいろいろとスクリプトをいじって実行してみることで、やがて全体が見えてくるはずです。

 今回、紹介したサンプルはどれも基本的な動作をするだけのシンプルなものです。これを参考にして、自分なりに改造することで、いろいろなヒントが見えてくると思います。HSPによって、実践的なプログラミングの世界を楽しんでもらえれば嬉しいです。

参考サイト

 HSPのダウンロードをはじめ、掲示板やメルマガ、技術資料など、多くの情報が「HSPTV!」サイトで入手できますので、参考にしてください。また、今回アニメーション表示のためのキャラクター素材として、サイト「風吹く森のティンベア」のキャラクター「ティンベア」を使用させて頂きました。興味を持った方は、併せてご覧ください。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
HSP入門連載記事一覧
この記事の著者

おにたま(オニタマ)

オニオンソフトウェア代表。http://www.onionsoft.net/http://hsp.tv/ゲーム系のソフト開発会社に勤めるかたわら、Hot Soup Processor (HSP)を始めとするフリーウェア...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/692 2008/08/22 19:11

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング