全然更新しないブログ
HSPメモ帳
こっそり、「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 : 初期化する画面モード
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」に
以下説明の値が入ります。
Xは横位置、Yは縦位置です | ||
prmx | スクリーン上のマウスの位置のX座標 | |
prmy | スクリーン上のマウスの位置のY座標 | |
prmx | アクティブなウィンドウID | |
prmy | 操作先のウィンドウID | |
prmx | ウィンドウの左上座標X | |
prmy | ウィンドウの左上座標Y | |
prmx | ウィンドウの右下座標X | |
prmy | ウィンドウの右下座標Y | |
prmx | ウィンドウのスクロール座標X | |
prmy | ウィンドウのスクロール座標Y | |
prmx | ウィンドウの全体のサイズX | |
prmy | ウィンドウの全体のサイズY | |
prmx | 画面の初期化サイズX | |
prmy | 画面の初期化サイズY | |
prmx | メッセージの出力サイズX | |
prmy | メッセージの出力サイズY |
※変更があった値は赤字で一瞬表示されます。 |
![]() |
#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エディタを終了して
再度すると問題なくコンパイルできました。
・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」の使用
- 「ll_libload」を使用して「unlha32.dll」をロードして、
以下関数をロードする。 - 「UnlhaCheckArchive」関数でファイルが壊れてないか調べる。
- 「UnlhaOpenArchive」関数で書庫ファイルのハンドルを取得。
- 「UnlhaFindFirst」、「UnlhaFindNext」関数で
ファイル内のデータを取得。 - 「UnlhaFindNext」が終了してから有効な
「UnlhaGetArcOriginalSize」、「UnlhaGetArcCompressedSize」関数を
使用して書庫ファイルの圧縮サイズと元サイズを取得。 - 最後に、「UnlhaCloseArchive」関数で3で取得したハンドルを指定して
書庫ファイルを閉じます。
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
[ ]の部分をセクションと呼びその下の部分のキーに
保存したい値を保存します。
セクションはキーのタイトルみたいなものです。
◆設定ファイル使用例
- 「llmod.as」をインクルードする。
(APIを使用するため) - 「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 )
« 前ページ | 次ページ » |