HSPに投稿されたコード一覧

HSP サブルーチン迷路

// subroutine maze

	randomize
	lb  = *LBottom, *lb1, *lb2, *lb3, *lb4
	msg = "bottom", "*1", "*2", "*3", "*4"
	cntPtns = length(lb)
	
	goto *LStepMaze		// Enter Maze
	
*lb1
	mes msg(1) : gosub *LStepMaze : return
*lb2
	mes msg(2) : gosub *LStepMaze : return
*lb3
	mes msg(3) : gosub *LStepMaze : return
*lb4
	mes msg(4) : gosub *LStepMaze : return
	
*LBottom
	mes msg(0)
	assert		// 停止
	return
	
*LStepMaze
	wait 10		// wait 必須 : 停止しない可能性もなくはない
	goto lb( (rnd(12) + 1) * 13 \ cntPtns )
	
// @ 参照: http://goo.gl/xUPHk
// @ 「リターン先が静的にわからない」状況を簡単に考えようと思った。今は反省している。
// @ よく考えたら、リターン先は普通わからないものだった。サブルーチンと呼び出し元は一般的に一体一対応じゃないのだ。

// mes で出力された文字列を見ると戻り先がわかる。
// @ これは「サブルーチンを監視する」方法の一例

HSP 【HSP3】リソース読み取りサンプル

#include "kernel32.as"
#include "user32.as"
#include "gdi32.as"
#define RT_BITMAP 2

	LoadLibrary "ieframe.dll"
	hModule = stat

	LoadImage hModule, 625, 0, 0, 0, 0
	hBitmap = stat

	// 画像サイズ取得
	dim BITMAP, 6
	GetObject hBitmap, 24, varptr(BITMAP)
	x = BITMAP(1)
	y = BITMAP(2)

	CreateCompatibleDC hdc
	hCompatDC = stat
	
	SelectObject hCompatDC, hBitmap
	hPrevBitmap = stat
	
	BitBlt hdc, 0, 0, x, y, hCompatDC, 0, 0, 0xCC0020
	redraw 1

	// 破棄
	SelectObject hCompatDC, hPrevBitmap
	DeleteObject hBitmap
	DeleteDC hCompatDC

HSP 他人の絵を盗み描く

#include "kernel32.as"//
#include "user32.as"//
#include "Gdi32.as"//3つDLL使うの久しぶりだ

#define RT_BITMAP           2

DLLNAME="ieframe.dll"
LoadLibrary DLLNAME
HDLL=stat

;pResourceName="Bitmap\\TRAVEL_PRESSED_XP_120.BMP"
RESNAME="TRAVEL_PRESSED_XP_120.BMP"//リソースハッカーで居場所を突き止めた画像をセット
FindResource HDLL, RESNAME, RT_BITMAP ;
HRES=stat
//LoadIcon HDLL,RESNAME
SizeofResource HDLL,HRES 
SizeRES=stat
LoadResource HDLL,HRES //戻り値はHGLOBAL グローバーるメモリにロード戻り値をLockResourceに渡すとBitMapのありか(=ポインタ)を教えてくれる
hLrs=stat
LockResource hLrs
lpBITMAPINFO=stat
dupptr BITMAPINFO,lpBITMAPINFO,44,
dwWidth=wpeek(BITMAPINFO,4)
dwHeight=wpeek(BITMAPINFO,8)
mes dwWidth
mes dwHeight
szBuf=lpBITMAPINFO+40+0
SetDIBitsToDevice hDC,0,0,dwWidth,dwHeight,0,0,0,dwHeight,szBuf,lpBITMAPINFO,0//この関数どんだけ引数あるんだよwww
mes stat
redraw 1

/* 関数や構造体の定義はこちら
	typedef struct tagBITMAPINFO {(44byte)=dim ***,11
	   BITMAPINFOHEADER bmiHeader;//下記参照(40byte)
	   RGBQUAD bmiColors[1]; //RGBQUADはDWORD(4byte)
	} BITMAPINFO;
	
	typedef struct tagBITMAPINFOHEADER {//(40byte)long=4 WORD=2 DWORD=4
	    DWORD  biSize;
	    LONG   biWidth;
	    LONG   biHeight;
	    WORD   biPlanes;
	    WORD   biBitCount;
	    DWORD  biCompression;
	    DWORD  biSizeImage;
	    LONG   biXPelsPerMeter;
	    LONG   biYPelsPerMeter;
	    DWORD  biClrUsed;
	    DWORD  biClrImportant;
	} BITMAPINFOHEADER;
	
	int SetDIBitsToDevice(
		  HDC hdc,                 // デバイスコンテキストのハンドル
		  int XDest,               // 転送先長方形の左上隅の x 座標
		  int YDest,               // 転送先長方形の左上隅の y 座標
		  DWORD dwWidth,           // 転送元長方形の幅
		  DWORD dwHeight,          // 転送元長方形の高さ
		  int XSrc,                // 転送元長方形の左下隅の x 座標
		  int YSrc,                // 転送元長方形の左下隅の y 座標
		  UINT uStartScan,         // 配列内の最初の走査行
		  UINT cScanLines,         // 走査行の数
		  CONST VOID *lpvBits,     // DIB ビットからなる配列
		  CONST BITMAPINFO *lpbmi, // ビットマップ情報
		  UINT fuColorUse          // RGB 値またはパレットインデックス
		);
*/
	// szBuf = (char *)lpBinfo + sizeof(BITMAPINFOHEADER) + nClr * sizeof(RGBQUAD);
	//ncrの値は色数だが0だとフルカラーなのでよし

HSP コンソール版HSPの簡単なサンプル

#runtime "hsp3cl"

/*
input p1,p2,p3 標準入力を取得
p1=変数名  : 情報を格納する変数名
p2=1~     : 変数に代入される最大文字数
p3=0~(0)  : 改行コード認識フラグ(0=なし/1,2=認識)
p3が1の場合はLFを、2の場合はCR+LFを改行と認識
*/

	mes "入力されたメッセージを表示します\n>"
	sdim res, 256
	input res, 256, 2
	mes "入力されたのは 「"+res+"」です "
	
	mes "終了しますか? yを入力しEnterすると終了します"
	
*exit
	input res, 256, 2
	if res == "y" : end
	goto *exit

HSP bit操作

#module sgetbit
#const FULL 0xFF
#const NULL 0x00
#deffunc setbit var map, int ptr, int bit
	if (bit!=0) && (bit!=1) : return -1
	if bit==0 : poke map, ptr/8, peek(map, ptr/8) & (FULL ^ (0x80 >> (ptr \ 8)))
	if bit==1 : poke map, ptr/8, peek(map, ptr/8) | (0x80 >> (ptr \ 8))
return 0

#defcfunc getbit var map, int ptr
return (peek(map, ptr/8) & (0x80 >> (ptr \ 8))) != 0

#global

HSP 画面レイアウト用

	screen 0,400,250
	title "title"
	
	gradf 0,0,400,35,1,$8ae8ff,$FFFFFF
	font"Meiryo",32
	pos 18,20:mes"Title"
	font"Meiryo",13
	pos 18+ginfo_mesx+15,20+ginfo_mesy-28:mes"sub"
	
	gradf 18,65,400-28,1,0,$68e8ff,$ffffff
	
	font"meiryo",13
	color 0,0,0
	pos 23,90:mes"A"
	pos 23,125:mes"B"
	pos 23,160:mes"C"
	
	gradf 0,215,400,100,1,$86a2ff,$ffffff

	;------------------------------------------------------
	;	オブジェクトを設置
	;
		objmode 2
		font"meiryo",13
		objsize 150,30
		pos 220,218:button"object",*label
	stop
*label
	end

HSP 【HSP3】MediaInfo.dll 用の定義ファイルと簡単なサンプル

#uselib "MediaInfo.dll"
#func MediaInfo_New "MediaInfo_New"
#func MediaInfo_New_Quick "MediaInfo_New_Quick" wptr,wptr
#func MediaInfo_Delete "MediaInfo_Delete" wptr
#func MediaInfo_Open "MediaInfo_Open" wptr,wptr
#func MediaInfo_Open_Buffer "MediaInfo_Open_Buffer" wptr,wptr,wptr,wptr,wptr
#func MediaInfo_Open_Buffer_Init "MediaInfo_Open_Buffer_Init" wptr,wptr,wptr
#func MediaInfo_Open_Buffer_Continue "MediaInfo_Open_Buffer_Continue" wptr,wptr,wptr
#func MediaInfo_Open_Buffer_Continue_GoTo_Get "MediaInfo_Open_Buffer_Continue_GoTo_Get" wptr
#func MediaInfo_Open_Buffer_Finalize "MediaInfo_Open_Buffer_Finalize" wptr
#func MediaInfo_Open_NextPacket "MediaInfo_Open_NextPacket" wptr
#func MediaInfo_Save "MediaInfo_Save" wptr
#func MediaInfo_Close "MediaInfo_Close" wptr
#func MediaInfo_Inform "MediaInfo_Inform" wptr,wptr
#func MediaInfo_GetI "MediaInfo_GetI" wptr,wptr,wptr,wptr,wptr
#func MediaInfo_Get "MediaInfo_Get" wptr,wptr,wptr,wptr,wptr,wptr
#func MediaInfo_SetI "MediaInfo_SetI" wptr,wptr,wptr,wptr,wptr,wptr
#func MediaInfo_Set "MediaInfo_Set" wptr,wptr,wptr,wptr,wptr,wptr
#func MediaInfo_Output_Buffer_Get "MediaInfo_Output_Buffer_Get" wptr,wptr
#func MediaInfo_Output_Buffer_GetI "MediaInfo_Output_Buffer_GetI" wptr,wptr
#func MediaInfo_Option "MediaInfo_Option" wptr,wptr,wptr
#func MediaInfo_State_Get "MediaInfo_State_Get" wptr
#func MediaInfo_Count_Get "MediaInfo_Count_Get" wptr,wptr,wptr
#func MediaInfoA_New "MediaInfoA_New"
#func MediaInfoA_New_Quick "MediaInfoA_New_Quick" sptr,sptr
#func MediaInfoA_Delete "MediaInfoA_Delete" sptr
#func MediaInfoA_Open "MediaInfoA_Open" sptr,sptr
#func MediaInfoA_Open_Buffer "MediaInfoA_Open_Buffer" sptr,sptr,sptr,sptr,sptr
#func MediaInfoA_Open_Buffer_Init "MediaInfoA_Open_Buffer_Init" sptr,sptr,sptr
#func MediaInfoA_Open_Buffer_Continue "MediaInfoA_Open_Buffer_Continue" sptr,sptr,sptr
#func MediaInfoA_Open_Buffer_Continue_GoTo_Get "MediaInfoA_Open_Buffer_Continue_GoTo_Get" sptr
#func MediaInfoA_Open_Buffer_Finalize "MediaInfoA_Open_Buffer_Finalize" sptr
#func MediaInfoA_Open_NextPacket "MediaInfoA_Open_NextPacket" sptr
#func MediaInfoA_Save "MediaInfoA_Save" sptr
#func MediaInfoA_Close "MediaInfoA_Close" sptr
#func MediaInfoA_Inform "MediaInfoA_Inform" sptr,sptr
#func MediaInfoA_GetI "MediaInfoA_GetI" sptr,sptr,sptr,sptr,sptr
#func MediaInfoA_Get "MediaInfoA_Get" sptr,sptr,sptr,sptr,sptr,sptr
#func MediaInfoA_SetI "MediaInfoA_SetI" sptr,sptr,sptr,sptr,sptr,sptr
#func MediaInfoA_Set "MediaInfoA_Set" sptr,sptr,sptr,sptr,sptr,sptr
#func MediaInfoA_Output_Buffer_Get "MediaInfoA_Output_Buffer_Get" sptr,sptr
#func MediaInfoA_Output_Buffer_GetI "MediaInfoA_Output_Buffer_GetI" sptr,sptr
#func MediaInfoA_Option "MediaInfoA_Option" sptr,sptr,sptr
#func MediaInfoA_State_Get "MediaInfoA_State_Get" sptr
#func MediaInfoA_Count_Get "MediaInfoA_Count_Get" sptr,sptr,sptr
#func MediaInfo_Info_Version "MediaInfo_Info_Version"
#func MediaInfoList_New "MediaInfoList_New"
#func MediaInfoList_New_Quick "MediaInfoList_New_Quick" wptr,wptr
#func MediaInfoList_Delete "MediaInfoList_Delete" wptr
#func MediaInfoList_Open "MediaInfoList_Open" wptr,wptr,wptr
#func MediaInfoList_Open_Buffer "MediaInfoList_Open_Buffer" wptr,wptr,wptr,wptr,wptr
#func MediaInfoList_Save "MediaInfoList_Save" wptr,wptr
#func MediaInfoList_Close "MediaInfoList_Close" wptr,wptr
#func MediaInfoList_Inform "MediaInfoList_Inform" wptr,wptr,wptr
#func MediaInfoList_GetI "MediaInfoList_GetI" wptr,wptr,wptr,wptr,wptr,wptr
#func MediaInfoList_Get "MediaInfoList_Get" wptr,wptr,wptr,wptr,wptr,wptr,wptr
#func MediaInfoList_SetI "MediaInfoList_SetI" wptr,wptr,wptr,wptr,wptr,wptr,wptr
#func MediaInfoList_Set "MediaInfoList_Set" wptr,wptr,wptr,wptr,wptr,wptr,wptr
#func MediaInfoList_Option "MediaInfoList_Option" wptr,wptr,wptr
#func MediaInfoList_State_Get "MediaInfoList_State_Get" wptr
#func MediaInfoList_Count_Get "MediaInfoList_Count_Get" wptr,wptr,wptr,wptr
#func MediaInfoList_Count_Get_Files "MediaInfoList_Count_Get_Files" wptr
#func MediaInfoListA_New "MediaInfoListA_New"
#func MediaInfoListA_New_Quick "MediaInfoListA_New_Quick" sptr,sptr
#func MediaInfoListA_Delete "MediaInfoListA_Delete" sptr
#func MediaInfoListA_Open "MediaInfoListA_Open" sptr,sptr,sptr
#func MediaInfoListA_Open_Buffer "MediaInfoListA_Open_Buffer" sptr,sptr,sptr,sptr,sptr
#func MediaInfoListA_Save "MediaInfoListA_Save" sptr,sptr
#func MediaInfoListA_Close "MediaInfoListA_Close" sptr,sptr
#func MediaInfoListA_Inform "MediaInfoListA_Inform" sptr,sptr,sptr
#func MediaInfoListA_GetI "MediaInfoListA_GetI" sptr,sptr,sptr,sptr,sptr,sptr
#func MediaInfoListA_Get "MediaInfoListA_Get" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func MediaInfoListA_SetI "MediaInfoListA_SetI" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func MediaInfoListA_Set "MediaInfoListA_Set" sptr,sptr,sptr,sptr,sptr,sptr,sptr
#func MediaInfoListA_Option "MediaInfoListA_Option" sptr,sptr,sptr
#func MediaInfoListA_State_Get "MediaInfoListA_State_Get" sptr
#func MediaInfoListA_Count_Get "MediaInfoListA_Count_Get" sptr,sptr,sptr,sptr
#func MediaInfoListA_Count_Get_Files "MediaInfoListA_Count_Get_Files" sptr


// ↓1にするとサンプルが実行できます。
#if 0

	// ファイル読み込みダイアログ
	dialog "*",16
	if (stat == 0) : end
	fname = refstr

	// ハンドルを取得
	MediaInfoA_New
	handle = stat
	// ハンドルを使用してファイル読み込み
	MediaInfoA_Open handle, fname
	if (stat){
		// 設定(これを設定すると詳細に取得できます)
		//MediaInfoA_Option handle, "Complete", "1"
		// 取得
		rev_size = 4096	// バッファサイズ
		MediaInfoA_Inform handle, rev_size
		dupptr info, stat, rev_size, 2
		mesbox info, 640, 480
	
		// 使用後は解放
		MediaInfoA_Delete handle
	}else{
		dialog "非対応の形式のようです"
	}
	
#endif

HSP メニュー

;
	title"sample"
;
	screen 0,400,200
	repeat
	redraw 0
	gradf 0,0,400,200,1,$333333,$111111
;
	gradf 10,10,160,35,1,$007700,$004400
	gradf 11,11,158,33,1,$333333,$222222
	if mousex>=10&mousey>=10&mousey<=45&mousex<=170{
		gradf 11,11,158,33,1,$333333,$222233
		stick click,,1
		if click=256&mode=0{
			mode=1
		}else{
			if click=256&mode=1{
				mode=0
			}
		}
	}
	if mode=1{
		gradf 11,11,158,33,1,$333333,$222233
		//メニューの項目
		gradf 200,20,180,35,1,$333333,$333333
		pos 220,30:mes"Menu 1"
	;
		gradf 200,60,180,35,1,$333333,$333333
		pos 220,70:mes"Menu 2"
	;
		gradf 200,100,180,35,1,$333333,$333333
		pos 220,110:mes"Menu 3"
	;
		gradf 200,140,180,35,1,$333333,$333333
		pos 220,150:mes"Menu 4"
	}
	font"Meiryo",13
	color 255,255,255
	pos -1000,-1000:mes"設定>>"
	pos (160-ginfo_mesx)/2+10,(35-ginfo_mesy)/2+10:mes"設定>>"
;
	redraw 1
	wait 1
	loop

HSP 【HSP3】絶対パスを相対パスに変換

#uselib "Shlwapi.dll"
#func PathRelativePathToA "PathRelativePathToA" var,str,int,str,int
#func PathRelativePathToW "PathRelativePathToW" var,wptr,int,wptr,int
#define FILE_ATTRIBUTE_DIRECTORY 0x10
#define FILE_ATTRIBUTE_NORMAL 0x80

	frompath = "C:\\test\\hsp\\test\\test.txt"
	topath = "C:\\test\\hsp3\\hogehoge\\hsp.txt"
	
	sdim outpath, 260
	PathRelativePathToA outpath, frompath, FILE_ATTRIBUTE_DIRECTORY, topath, FILE_ATTRIBUTE_NORMAL
	
	mes "From    : "+frompath
	mes "To      : "+topath
	mes "相対パス: "+outpath

HSP 【HSP3】ファイル名、ディレクトリ名として使える名前かチェックするモジュール

#module _FileNameCheck_
#uselib "Shlwapi.dll"
#func PathGetCharTypeA "PathGetCharTypeA" int
#func PathGetCharTypeW "PathGetCharTypeW" int
#define GCT_INVALID 0	// この文字はパスに使用できない。
#define GCT_LFNCHAR 1	// この文字は長い形式のファイル名に使用することができる。
#define GCT_SHORTCHAR 2	// この文字は短い形式のファイル名に使用することができる。
#define GCT_WILD 4		// この文字はワイルドカード文字である。
#define GCT_SEPARATOR 8	// この文字はパスの区切りの文字である。

#defcfunc IsFileNamePath str _buftext
	buftext = _buftext
	sdim u_text, strlen(buftext)*2+2
	cnvstow u_text, buftext
	r = 0
	repeat 
		if wpeek(u_text, cnt*2) == 0 : break
		PathGetCharTypeW wpeek(u_text, cnt*2)
		if stat == 0 | stat == 4 | stat == 8 : r = -1 : break
	loop
return r
#defcfunc IsDirNamePath str _buftext
	buftext = _buftext
	sdim u_text, strlen(buftext)*2+2
	cnvstow u_text, buftext
	r = 0
	repeat 
		if wpeek(u_text, cnt*2) == 0 : break
		PathGetCharTypeW wpeek(u_text, cnt*2)
		if stat == 0 | stat == 4 : r = -1 : break
	loop
return r
#global

	// 使えない文字だと -1 が返ります
	
	mes IsFileNamePath("text.txt")		; 問題ないファイル名なのでOK
	mes IsDirNamePath("C:\\test.txt")	; 問題ないディレクトリ名なのでOK
	
	mes IsFileNamePath("C:\\test.txt")	; ファイル名としては\は使えないのでNG
	mes IsDirNamePath("C:\\test.txt")	; ディレクトリ名ならOK
	
	mes IsFileNamePath("test?.txt")		; ?は使えないのでNG
	mes IsDirNamePath("C:\\test?.txt")	; ?は使えないのでNG
Total Pages: 20 / 23« 先頭...101819202122...最後 »

よく投稿されているコード

タグ

最近投稿されたコード