2004/6/20公開
2004/7/13更新
;***************************************************** ; ○画像の読み込み ; LoadPicture2 p1,p2 ; p1:画像ファイル名(フルパス。packfile・memfileは不可) または URL ; p2:画面の初期化モード(0=初期化する,1=初期化しない) ; ; 現在のウインドウに画像(BMP,JPEG,GIF,ICO,PNG)を読み込みます。 ; p2を0にすると画面を初期化してから画像を読み込みます。 ; p2を1にした場合は初期化せずに、現在位置(pos命令で指定)に画像を読み込みます。 ; p2に0を指定して、透過画像を読み込む場合にはcolor命令で指定されている色を透過色に割り当てます。 ; 成功した場合statに0がセットされます。 ; ; 初期状態のWin95では動かないかもしれません(Win95+IE5で動作確認) ;--------------------------------------------------- #module #define SETUUID(%1,%2,%3,%4,%5,%6) ll_bin %1,"%5 %6":%1.3=%1,%1.1:%1.1=$%2,$%4<<16|$%3:ll_getptr %1.1:ll_ret %1 #define CLSCTX_INPROC_SERVER $00000001 #define IMGLOAD_LOADING 0x00200000 // Image in the process of being loaded #define IMGLOAD_COMPLETE 0x01000000 // Image loaded #define IMGTRANS_OPAQUE 0x20000000 #define CP_ACP $00000000 #define MB_PRECOMPOSED $00000001 #define Release 2 ;IImgCtx's method #define Load 3 #define GetStateInfo 8 #define Draw 10 #deffunc LoadPicture2 str,int mref filename,32 mref mode,1 mref _stat,64 mref bm,67 ll_libload hOle,"ole32.dll" ll_libload hKernel,"kernel32.dll" ll_getproc pCoInitialize,"CoInitialize",hOle ll_getproc pCoUninitialize,"CoUninitialize",hOle ll_getproc pCoCreateInstance,"CoCreateInstance",hOle ll_getproc pMultiByteToWideChar,"MultiByteToWideChar",hKernel ll_getproc pSleep,"Sleep",hKernel SETUUID IID_IImgCtx,3050f3d7,98b5,11cf,bb82,00aa00bdce0b SETUUID CLSID_IImgCtx,3050f3d6,98b5,11cf,bb82,00aa00bdce0b prm=0: ll_callfunc prm,1,pCoInitialize prm=CLSID_IImgCtx,0,CLSCTX_INPROC_SERVER,IID_IImgCtx:ll_getptr pIImgCtx:ll_ret prm.4 ll_callfunc prm,5,pCoCreateInstance: ll_ret result: if result:stt=1:goto *fin ll_peek4 pvtbl,pIImgCtx: ll_peek vtbl,pvtbl,13*4 sdim wname,1024 prm=CP_ACP,MB_PRECOMPOSED,0,-1,0,1024:ll_getptr filename:ll_ret prm.2:ll_getptr wname:ll_ret prm.4 ll_callfunc prm,6,pMultiByteToWideChar prm=pIImgCtx,0,0:ll_getptr wname:ll_ret prm.1: ll_callfunc prm,3,vtbl.Load: ll_ret result if result:stt=2:goto *fin prm=pIImgCtx,0,0,0:ll_getptr stt:ll_ret prm.1:ll_getptr size:ll_ret prm.2 prm2=10 repeat ll_callfunc prm,4,vtbl.GetStateInfo: ll_ret result if result: stt=0:break if stt&IMGLOAD_LOADING==0:break ll_callfunc prm2,1,pSleep loop if stt&IMGLOAD_COMPLETE==0:stt=3:goto *fin if mode==0{ initcolor=bm.40 if bm.17==1{ buffer bm.18,size,size.1,0 }else{if bm.17==2{ bgscr bm.18,size,size.1,0 }else{ screen bm.18,size,size.1,0 }} cx=0:cy=0 if stt&IMGTRANS_OPAQUE==0{ redraw 0 color initcolor&$ff,initcolor>>8&$ff,initcolor>>16&$ff boxf 0,0,size,size.1 color } }else{ cx=bm.27:cy=bm.28 } mref bm,67 rect=cx,cy,cx+size,cy+size.1 prm=pIImgCtx,bm.4:ll_getptr rect:ll_ret prm.2: ll_callfunc prm,3,vtbl.Draw: ll_ret result if result:stt=5:goto *fin stt=0 redraw 1 *fin if pIImgCtx:ll_callfunc pIImgCtx,1,vtbl.Release: pIImgCtx=0 ll_callfnv pCoUninitialize ll_libfree hKernel ll_libfree hOle _stat=stt return #global ;***************************************************** ;以下サンプル dialog "bmp;*.jpg;*.gif;*.png;*.ico",16 if stat==0:end LoadPicture2 refstr if stat:mes "エラー" stop