2007年7月21日土曜日

(X)HTMLコンバータ (4) 編集中のスクリプトを取得

編集中のスクリプトを取得するスクリプト。HSPスクリプトエディタ起動時に実行してみてください。エラー処理は適当です。
流れとしては

  1. タブコントロールにTCM_GETCURSELを送り現在選択されているタブのインデックスを取得
  2. タブのインデックスをFootyのハンドルに変換
  3. hsed_gettextを実行
といったところです。TCM_GETCURSELはちょくとさんのサイトを参考とさせていただきました。

なお、実行には別途HSPSDKのhsedsdk.asが必要です。HSPSDKはONION software/おにたま氏の著作物であり、ONION softwareウェブサイトから入手できます。
#include "hsedsdk.as"

#module "hsedsdk_getScript"
#define  TCM_GETCURSEL       0x130B
#deffunc hsed_getScript var result, local hwndTab, local iTab, local footyId
    hsed_capture
    if stat : return 1                      // エディタが起動していない

    hsed_getwnd hwndTab, HGW_TAB
    sendmsg hwndTab, TCM_GETCURSEL, 0, 0
    if ( stat == -1 ) : return 2
    iTab = stat   // 何番目のタブが選択されているか

    // タブのインデックスからfootyIdを取得し、スクリプトを変数にコピー
    hsed_getfootyid footyId, iTab
    hsed_gettext result, footyId
    return stat
#global

*getText
    // エディタからスクリプトを取得
    text = ""

    hsed_getScript text
    if ( stat == 1 ) {
        dialog "HSPエディタが見つかりません。", 1, PROGRAM_TITLE
        end
    }
    if ( stat == 2 ) {
        dialog "HSPエディタから正しいウィンドウハンドルを取得できませんでした。", 1, PROGRAM_TITLE
        end
    }
    if ( stat == 3 ) {
        dialog "パイプハンドルを作成できませんでした。", 1, PROGRAM_TITLE
        end
    }

    mesbox textginfo_winxginfo_winy
    stop

※この例を見れば分かるように、textなど「標準命令ではない命令や関数と同じ名前を付けた変数」は命令や関数として認識されてしまいます。この問題は仕様としてスクリプト記述時に気をつけていただこうと思っています。

追記:HSPSDK3.1RC1を使った場合のモジュールはHSP開発Wikiのページをご覧ください。

8 件のコメント:

匿名 さんのコメント...

hsed_gettextなんてありましたっけ?
ellerさんはどのバージョンのHSPを使っているのですか?

31b7を境にhsedsdkが変更されていて、31b10現在では定数がいっぱい定義されているものの、半分の定数しか使い方が分かっていません。
メッセージだけ定義して実装はしていない可能性もあるかも知れませんね...。
WiKiに分かっている分のリファレンスを書いて不明点をユーザーの方々に補ってもらおうかな^^;

匿名 さんのコメント...

あとhsedsdk.asはHSPSDKではなくhsp261cmp.asなどと一緒に同梱されているので、
HSPSDKを導入しなくても大丈夫です。

eller さんのコメント...

kz3さん、コメントありがとうございます。
今回の一連の開発ではkz3さんの資料やスクリプトがとても役に立ちました。

> hsed_gettextなんてありましたっけ?
HSPSDK3.1β10(現在の最新版)には記載されています。
ヘルプには載っていないのでhsedsdk.asを直接読まないと気付かないかも知れません。

> HSPSDKを導入しなくても大丈夫です。
ご指摘ありがとうございます。
そういえばhsedsdk.asをcommonフォルダにコピーした時に「上書きしますか?」と聞かれた気がします。

Wikiには分っている範囲で情報を追加していこうと思います。

匿名 さんのコメント...

あ!これは気づきにくいですね!
今までは
・HSP ver3.1β10(アップデート版)のダウンロード (8.22MB)
に入っていたのですが、HSPSDKにも「hsed3」というフォルダがありました。
メッセージ定数もアンダーバーが
プレフィクスされていたりと変わっているんですね~。
ありがとうございました!

今回ばかりはHSPSDKを導入しないと(最新の)hsedsdk.asが利用できないようですね。

eller さんのコメント...

HSP3.1b10をDLして確認してみました。

SDK同梱の方が定義されている命令は多いのですが、ファイルのタイムスタンプはhsp3.1b10に同梱されている物の方が新しいようですね。
どちらを利用すべきなのか判断しかねます。今度おにたまさんに確認を取ってみます。

匿名 さんのコメント...

3.1RC1では_HSED_GETACTTABIDなどが定義されている最新のhsedsdk.asが同梱されていますね。

eller さんのコメント...

_HSED_GETACTFOOTYIDなんてのもありますね。RC1に対応したスクリプトをUPしたいと思います。

おにたまさんからメールの返信はありませんが、きっと読んでいただけたのでしょう。後ほどお礼のメールを送っておきます。

eller さんのコメント...

ちょっと訂正。おにたまさんからメールが届いていました。やはり読んでくださっていたようです。