goo blog サービス終了のお知らせ 
goo

こっそり、「buffer」

一覧リスト:HSP Ver2.61ブログ関連その他 ・・・ 人気blogランキング

「buffer」
透明で見えないウィンドウを作成します。
画像をロードしたり、ユーザーに見えないように
処理したい場合に使います。
他に「screen」「bgscr」があります。

◆機能
buffer p1,p2,p3,p4
p1=0~31(0) : ウインドゥID
※ID:1は使用しない事。

p2,p3 : 初期化する画面サイズX,Y(1ドット単位)

p4=0~1 : 初期化する画面モード

「buffer」のサンプル
    dialog "buffer2に文字出力"
    buffer 2,300,300
    color : boxf
    font "",300
    color 255,128,0
    pos 0,0 :mes "●"
    font "",140
    color 255,192,64
    pos 80,80 :mes "★"

    dialog "screen0にbuffer2の内容をコピー"
    screen 0,300,300
    title "○○○○ボール"
    //gcopy
    //ウィンドウIDを指定して任意の場所と大きさをコピー
    gcopy 2,0,0,300,300
stop
コメント ( 0 ) | Trackback ( 0 )

「ginfo」でサイズ取得!

一覧リスト:HSP Ver2.61ブログ関連その他 ・・・ 人気blogランキング

「ginfo」
マウス、ウィンドウの位置、サイズなどの情報を取得できます。

◆機能
ginfo p1
p1に数値を指定します。
数値によって、システム変数 「prmx」「prmy」に
以下説明の値が入ります。
p1
「ginfo」 の説明
Xは横位置、Yは縦位置です
 0 
prmxスクリーン上のマウスの位置のX座標
prmyスクリーン上のマウスの位置のY座標
1
prmxアクティブなウィンドウID
prmy操作先のウィンドウID
2
prmxウィンドウの左上座標X
prmyウィンドウの左上座標Y
3
prmxウィンドウの右下座標X
prmyウィンドウの右下座標Y
4
prmxウィンドウのスクロール座標X
prmyウィンドウのスクロール座標Y
5
prmxウィンドウの全体のサイズX
prmyウィンドウの全体のサイズY
6
prmx画面の初期化サイズX
prmy画面の初期化サイズY
7
prmxメッセージの出力サイズX
prmyメッセージの出力サイズY


「ginfo」 サンプル
※変更があった値は赤字で一瞬表示されます。
実行結果
サンプルコード
#include "llmod.as"

    screen 0,150,25
    gsel 0,2
    title "ginfo"
    font "MS 明朝",12
    color : boxf : color 255,255,255
    pos 2,2 : mes "ginfo サンプル"


    screen 2,dispx,dispy,0,10,20,300,300
    title "「ginfo」サンプル"
    font "MS ゴシック",12

    objsize winx,25 : pos 0,0
    button "終了",*endsoft
    _hspobjhandle stat : hbtn=stat

    sdim data,20,8,2
    data.0.0="マウス座標X"
    data.0.1="マウス座標Y",
    data.1.0="アクティブID"
    data.1.1="操作先ID"
    data.2.0="左上座標X"
    data.2.1="左上座標Y"
    data.3.0="右下座標X"
    data.3.1="右下座標Y"
    data.4.0="スクロール座標X"
    data.4.1="スクロール座標Y"
    data.5.0="全体のサイズX"
    data.5.1="全体のサイズY"
    data.6.0="初期化サイズX"
    data.6.1="初期化サイズY"
    data.7.0="メッセージ出力X"
    data.7.1="メッセージ出力Y"

    dim ginfodata,8,2
    py=40
    wx=winx : wy=winy
    sx=0 : sy=0

*main
    ginfo 4
    //ウィンドウサイズが変更,スクロールされた時
    if (winx!=wx) | (winy!=wy)| (prmx!=sx) | (prmy!=sy){
        ginfo 4
        prm=hbtn,0,0,winx,25,1
        dllproc "MoveWindow",prm,6,D_USER
        wx=winx : wy=winy
        sx=0 : sy=0
    }
    gosub *ginfo_draw
    wait 30
goto *main

*ginfo_draw
    redraw 0
    color : boxf : color 255,255,255
    ginfo 4
    pos prmx+20,prmy+40
    mes "screen 2,"+dispx+","+dispy+",0,10,20,300,300"
    mes ""
    repeat 8
        ginfo cnt
        if ginfodata.cnt.0!=prmx:color 255,0,0:else:color 255,255,255
        mes "ginfo "+cnt+" "+data.cnt.0+":"+prmx
        if ginfodata.cnt.1!=prmy:color 255,0,0:else:color 255,255,255
        mes "        "+data.cnt.1+":"+prmy
        ginfodata.cnt.0=prmx
        ginfodata.cnt.1=prmy
    loop
    redraw 1
return

*endsoft

end


コメント ( 0 ) | Trackback ( 0 )

システム変数 「err」

一覧リスト:HSP Ver2.61ブログ関連その他 ・・・ 人気blogランキング

システム変数 「err」
?なエラー
Fatal error : Initalizing compiler
コンパイルが不可能になる。
一度HSPエディタを終了して
再度すると問題なくコンパイルできました。

「err」 の説明
・1 解釈できない HSP コードです
コンパイルされた HSP の中間コードが間違っています。
通常は表示されないエラーです。
ファイルが破損している場合や、
予期しない事態が起こった時に表示されます。

・2 文法が間違っています
命令や、変数名、ラベル名の書き方が間違っている時に
表示されます。

・3 パラメータの数値が異常です
パラメータの数値が許容範囲を越えている場合に
表示されます。

・4 計算式でエラーが発生しました
計算式の書き方が間違っていたり、
使用できない記号や演算をしようとした時に表示されます。

・5 パラメータの省略はできません
パラメータの省略ができない部分が省略されている時に
表示されます。

・6 パラメータの型が違います
パラメータに指定された型(文字列型、数値型)が、
規定のものではない時に表示されます。
変数が指定されている場合は、変数の型が間違っています。

・7 配列の要素が大きすぎます
配列の要素として指定した値が、
dim、sdim命令などで設定した数を越えている時に表示されます。

・8 有効なラベルが指定されていません
ラベルとして指定すべきパラメータが間違っている場合や、
ラベルを示す「*」の後に何もない時に表示されます。

・9 gosub, repeat のネストが深すぎます
gosub 命令、repeat 命令を多重に実行しすぎた時
に表示されます。

・10 サブルーチン外の return は無効です
gosub 命令で呼ばれていないのに、
return 命令が実行された時に表示されます。

・11 repeat 外での loop は無効です
repeat 命令がないのに、loop 命令が実行された時に
表示されます。

・12 ファイルが見つからないか無効な名前です
ファイル操作をする時に、
指定されたファイルが見つからなかったか、
またはアクセスできないファイルである時に表示されます。

・13 画像ファイルがありません
picload 命令で読み込むための画像ファイルが
見つからない時に表示されます。

・14 外部ファイル呼び出し中のエラーです
exec 命令で外部ファイルを呼び出す際に、
何らかの問題が発生した時に表示されます。

・15 計算式でカッコの記述が違います
計算式で使われている括弧「(、)」の書式が正しくない、
または対応がおかしい時に表示されます。

・16 パラメータの数が多すぎます
命令に指定されたパラメータの数が多すぎる時に
表示されます。

・17 扱える文字列の上限を越えています
文字列を扱う上での許容量を越えた時に表示されます。

・18 代入できない変数名を指定しています
システム変数や予約キーワードに対して
代入しようとした時に表示されます。

・19 0 で除算しました
0 で割り算をしようとした場合に表示されます。

・20 バッファオーバーフローが発生しました
文字列変数のために sdim 命令や、
dim 命令で確保したサイズをオーバーした場合や、
変数バッファを超えてアクセスを行なおうとした場合に
表示されます。

・21 サポートされない機能を選択しました
コメント ( 0 ) | Trackback ( 0 )

圧縮ファイルの閲覧(unlha32)

一覧リスト:HSP Ver2.61ブログ関連その他 ・・・ 人気blogランキング

「unlha32.dll」を使用した圧縮ファイル内(LZH)の閲覧

◆「unlha32.dll」について
吉崎栄泰氏が開発された「LHA」。
そして、Micco氏がDLL化しています。
最新unlha32.dllはこちらにあります。 (Micco's HomePage)
また、ダウンロードしたファイル内のAPI.TXTに使用方法が書いてあります。

◆「unlha32.dll」の使用
  1. 「ll_libload」を使用して「unlha32.dll」をロードして、
    以下関数をロードする。
  2. 「UnlhaCheckArchive」関数でファイルが壊れてないか調べる。
  3. 「UnlhaOpenArchive」関数で書庫ファイルのハンドルを取得。
  4. 「UnlhaFindFirst」、「UnlhaFindNext」関数で
    ファイル内のデータを取得。
  5. 「UnlhaFindNext」が終了してから有効な
    「UnlhaGetArcOriginalSize」、「UnlhaGetArcCompressedSize」関数を
    使用して書庫ファイルの圧縮サイズと元サイズを取得。
  6. 最後に、「UnlhaCloseArchive」関数で3で取得したハンドルを指定して
    書庫ファイルを閉じます。
LHA圧縮ファイル閲覧 サンプル
unlha32.dll Ver2.01
※実行ファイルのフォルダにunlha32.dllを入れておいてください
※実行ファイルを作成してから実行してください(実行ファイル作成方法
    //リストボックスの格納データ
    sdim lbdata,1024
    //dllの返り値を格納する整数変数
    llret=0

    screen 0 , 600,322
    title "LZHファイル閲覧 サンプル"
    mref bmscr,67

    objmode 2 : font "" , 12
    objsize winx,20 : pos 0,0 : button "LZHファイルを開く",*fileopen
    objsize winx,winy : pos 0,20 : listbox lb,0,lbdata
    notesel lbdata

    //unlha32.dllが存在するか確認
    exist "UNLHA32.DLL"
    if strsize=-1:dialog "UNLHA32.DLLがありません":end

    //unlha32.dllのロード
    unlha32=0
    ll_libload unlha32 , "UNLHA32"
    if unlha32=0:dialog "UNLHA32.dll ロード失敗" : end

    //終了処理
    onexit *end1

*fileopen
    //LHAファイルを開くダイアログ
    dialog "lzh" , 16 , "LZHファイル" 
    if stat=0 : stop
    sdim filename,1024 : filename=refstr
    //ファイルのポインタ取得 pfile
    pfile=0 : ll_getptr filename : ll_ret pfile

    lbdata=""

    //関数のポインタ取得
    //lhachek
    ll_getproc lhacheck , "UnlhaCheckArchive" , unlha32
    //lhaopen
    ll_getproc lhaopen , "UnlhaOpenArchive" , unlha32
    //lhafindfirst
    ll_getproc lhafindfirst , "UnlhaFindFirst" , unlha32
    //lhafindnext
    ll_getproc lhafindnext , "UnlhaFindNext" , unlha32
    //lhaorgsize
    ll_getproc lhaorgsize , "UnlhaGetArcOriginalSize" , unlha32
    //lhacmpsize
    ll_getproc lhacmpsize , "UnlhaGetArcCompressedSize" , unlha32
    //lhaclose
    ll_getproc lhaclose , "UnlhaCloseArchive" , unlha32

    //書庫のチェック (通常モード)
    prm.0=pfile , 1
    ll_callfunc prm , 2 , lhacheck
    ll_ret llret
    if llret=0 : dialog "LZHファイルではありません" : goto *end1

    //書庫ファイルのハンドル取得 hlzh
    //破損ファイル無視、ルートディレクトリーも取得
    prm=bmscr.13 , pfile , 0x08001000
    ll_callfunc prm , 3 , lhaopen
    ll_ret llret : hlzh = llret
    if hlzh=0 : dialog "書庫ファイルの読込失敗" : goto *end1

    //ファイルを検索する際のワイルドカード
    sdim wildname,64 : wildname="*.*"
    hwildname=0 : ll_getptr wildname : ll_ret hwildname

    //ファイルの情報が格納されるsubinfo
    dim subinfo , 560
    ll_getptr subinfo : ll_ret psubinfo

    //ファイルの情報を取得
    prm=hlzh , hwildname , psubinfo
    ll_callfunc prm , 3 , lhafindfirst
    ll_ret llret
    if llret!=0 : goto *end1
    gosub *list_add

    repeat
        prm=hlzh , psubinfo
        ll_callfunc prm , 2 , lhafindnext
        ll_ret llret
        if llret!=0 : break
        gosub *list_add
        await 1
    loop

    //書庫ファイルの各サイズ取得
    prm=hlzh
    ll_callfunc prm , 1 , lhaorgsize     
    orgsize=0 : ll_ret orgsize
    ll_callfunc prm , 1 , lhacmpsize     
    cmpsize=0 : ll_ret cmpsize
    if orgsize!=0 : srate=cmpsize*100/orgsize : else : cmpsize=0 : srate=0
    sdim sizedata,1024
    sizedata="オリジナル:"+orgsize+"byte  圧縮後:"+cmpsize+"byte  ["+srate+"%]"
    noteadd sizedata , 0


    //書庫ファイルの解放
    prm=hlzh
    ll_callfunc prm , 1 ,lhaclose

    //リストボックスに表示
    objprm 1 , lbdata
stop

//INDIVIDUALINFO 型の構造体からlbdataに情報取得
*list_add
    sdim str1,1024
    dim forgsize : dim fcmpsize
    memcpy str1,subinfo,513,0,26
    memcpy forgsize,subinfo,4,0,0
    memcpy fcmpsize,subinfo,4,0,4
    if forgsize!=0 :frate=fcmpsize*100/forgsize : else :fcmpsize=0 :frate=0
    str1+="  ("+forgsize+"/"+fcmpsize+"["+frate+"%])"
    noteadd str1,-1
return

//終了処理
*end1
    //unlha32.dllの解放
    ll_libfree unlha32
    end
実行結果
コメント ( 0 ) | Trackback ( 0 )

設定(INI)ファイルの使用

一覧リスト:HSP Ver2.61ブログ関連その他 ・・・ 人気blogランキング

設定(INI)ファイルの使用
設定ファイルにウィンドウのサイズやユーザー設定データなどを
読込、保存することができます。
また、「onexit」命令を使用することで、
プログラム終了前に処理が可能です。
保存ファイル例)
[window]
x=100
[player]
age=20
[ ]の部分をセクションと呼びその下の部分のキーに
保存したい値を保存します。
セクションはキーのタイトルみたいなものです。

◆設定ファイル使用例
  1. 「llmod.as」をインクルードする。
    (APIを使用するため)
  2. 「dllproc」命令を使って、
    「GetPrivateProfileStringA」「GetPrivateProfileIntA」関数で
    ファイルを読み込み、
    「WritePrivateProfileStringA」関数で
    ファイルを保存します。
◆機能
文字列をファイルから読み込みます。
dllproc "GetPrivateProfileStringA",prm,6,D_KERNEL
パラメータ 6
prm.0=セクション名(文字列のポインタ)
prm.1=キーの名前(文字列のポインタ)
prm.2=ファイルにキーが見つからなかった時の
    デフォルト文字列(文字列のポインタ)
prm.3=キーのデータを格納する変数(ポインタ)
prm.4=prm.3のサイズ
prm.5=読み込むファイル名(文字列のポインタ)

◆機能
数値をファイルから読み込みます。
dllproc "GetPrivateProfileIntA",prm,4,D_KERNEL
パラメータ 4
prm.0=セクション名(文字列のポインタ)
prm.1=キーの名前(文字列のポインタ)
prm.2=ファイルにキーが見つからなかった時の
    デフォルト数値
prm.3=読み込むファイル名
戻り値にキーの数値が入っています。

◆機能
文字列をファイルに保存します。
dllproc "WritePrivateProfileStringA",prm,4,D_KERNEL
パラメータ 4
prm.0=セクション名(文字列のポインタ)
prm.1=キーの名前(文字列のポインタ)
prm.2=保存したい文字列(文字列のポインタ)
prm.3=保存するファイル名(文字列のポインタ)
※数値を保存する関数はありません。

設定ファイルを使用したサンプル
※一度EXEファイルを作成してから実行してください。
また、そのフォルダにinitest.iniファイルが作成されます。
作成されるのは一度起動して終了してからです。
2回起動しないとダイアログは表示されません。
#include "llmod.as"
#define INIFILE exedir+"initest.ini"
    screen 0,160,25
    title "どちらですか?"
    objsize winx/2,25
    pos        0 , 0 : button "男性",*men
    pos winx/2 , 0 : button "女性",*women

    //INIファイルの読込
    sdim section,8
    sdim key,8
    sdim sex,8
    sdim filename,1024
    section="USER" : getptr prm.0,section
    key="sex" : getptr prm.1,key
    prm.2=0
    sex="" : getptr prm.3,sex
    prm.4=8
    filename=INIFILE : getptr prm.5,filename
    dllproc "GetPrivateProfileStringA",prm,6,D_KERNEL

    if sex!=""{
        dialog "あなたは"+sex+"ですね?"
    }
    //終了処理でINIファイルに保存します。
    onexit *endapli
stop

*men
sex="男性"
stop

*women
sex="女性"
stop

//終了処理
*endapli
    section="USER" : getptr prm.0,section
    key="sex" : getptr prm.1,key
    getptr prm.2,sex
    filename=INIFILE : getptr prm.3,filename
    dllproc "WritePrivateProfileStringA",prm,4,D_KERNEL
end
コメント ( 0 ) | Trackback ( 0 )
« 前ページ 次ページ »