#include "loadlib.as" ;================================================================================= ; ; 実行には HSP ver2.5(ベータ版含む)以上が必要です ; ;================================================================================= #define hdc_is_display 0 #define PS_SOLID 0 #define PS_DASH 1 #define PS_DOT 2 #define PS_DASHDOT 3 #define PS_DASHDOTDOT 4 #define PS_NULL 5 #define PS_INSIDEFRAME 6 #define BS_DIBPATTERN 5 #define BS_DIBPATTERN8X8 8 #define BS_DIBPATTERNPT 6 #define BS_HATCHED 2 #define BS_HOLLOW 1 #define BS_NULL 1 #define BS_PATTERN 3 #define BS_PATTERN8X8 7 #define BS_SOLID 0 #define HS_BDIAGONAL 3 #define HS_CROSS 4 #define HS_DIAGCROSS 5 #define HS_FDIAGONAL 2 #define HS_HORIZONTAL 0 #define HS_VERTICAL 1 onexit *endp load_dll_num=0 load_dll_handle=0 sdim dll_names,1024 dllname="gdi32.dll" : gosub myDLLload : hGDI32=hDLL dllname="user32.dll" : gosub myDLLload : hUSER32=hDLL hDLL=hGDI32 funcname="CreatePen" : gosub myGetProc : F_CreatePen=F funcname="CreateBrushIndirect" : gosub myGetProc : F_CreateBrushIndirect=F funcname="SelectObject" : gosub myGetProc : F_SelectObject=F funcname="MoveToEx" : gosub myGetProc : F_MoveToEx=F funcname="LineTo" : gosub myGetProc : F_LineTo=F funcname="DeleteObject" : gosub myGetProc : F_DeleteObject=F funcname="Ellipse" : gosub myGetProc : F_Ellipse=F funcname="Arc" : gosub myGetProc : F_Arc=F hDLL=hUSER32 funcname="GetActiveWindow" : gosub myGetProc : F_GetActiveWindow=F funcname="ClientToScreen" : gosub myGetProc : F_ClientToScreen=F funcname="WindowFromPoint" : gosub myGetProc : F_WindowFromPoint=F funcname="EnableWindow" : gosub myGetProc : F_EnableWindow=F ll_callfnv F_GetActiveWindow ll_ret hHSPWnd if hdc_is_display!0 { hDLL=hGDI32 funcname="CreateDCA" : gosub myGetProc device="DISPLAY" : ll_getptr device : ll_ret p_device param.0=p_device param.1=0 param.2=0 param.3=0 n_param=4 : gosub myFuncCall : hdc = F_ret max_x=dispx : max_y=dispy }else{ mref BMSCR,67 hdc=BMSCR.4 max_x=winx : max_y=winy } ll_getptr brush : ll_ret p_brush max_x+ : max_y+ *_start title "ESCキーで中断" if hBtnEnd!0 { enable=0 hBtnWnd=hBtnEnd : gosub enable_btn_wnd hBtnWnd=hBtnAgain : gosub enable_btn_wnd } randomize ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ repeat 100 getkey hESC,27 : if hESC=1 : break wait 1 rnd x1,max_x rnd y1,max_y rnd x2,max_x rnd y2,max_y rnd x3,max_x rnd y3,max_y rnd r,$100 rnd g,$100 rnd b,$100 pen_c=(b<<16)|(g<<8)|r rnd pen_w,40 rnd brush.0,3 brush.1=(g<<16)|(r<<8)|g rnd brush.2,6 F=F_CreatePen param.0=PS_SOLID param.1=pen_w param.2=pen_c n_param=3 gosub myFuncCall : hPen=F_ret F=F_CreateBrushIndirect param.0=p_brush n_param=1 gosub myFuncCall : hBrush=F_ret param.0=hdc F=F_SelectObject param.1=hPen n_param=2 gosub myFuncCall : hOldPen=F_ret param.1=hBrush gosub myFuncCall : hOldBrush=F_ret F=F_MoveToEx ll_getptr point : ll_ret p_point param.1=x1 param.2=y1 param.3=p_point n_param=4 gosub myFuncCall F=F_LineTo param.1=x2 param.2=y3 n_param=3 gosub myFuncCall F=F_Ellipse param.1=x2 param.2=y1 param.3=x3 param.4=y2 n_param=5 gosub myFuncCall F=F_Arc param.1=x3 param.2=y2 param.3=x2 param.4=y3 param.5=x1 param.6=y1 param.7=param.5/(x3+1) param.8=param.6/(y3+1) n_param=9 gosub myFuncCall F=F_SelectObject param.1=hOldPen n_param=2 gosub myFuncCall param.1=hOldBrush gosub myFuncCall F=F_DeleteObject param.0=hPen n_param=1 gosub myFuncCall param.0=hBrush gosub myFuncCall if hdc_is_display!1 : redraw loop ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ title "終了" if button_is_created=0 { point.0=csrx : point.1=csry button "終了",endp : end_btn_id=0 : id+ gosub get_end_btn_wnd : hBtnEnd=hBtnWnd point.0=csrx : point.1=csry button "もう一度",_start : id+ gosub get_end_btn_wnd : hBtnAgain=hBtnWnd button_is_created=1 }else{ enable=1 hBtnWnd=hBtnEnd : gosub enable_btn_wnd hBtnWnd=hBtnAgain : gosub enable_btn_wnd } if hdc_is_display!0 : screen 2,dispx,dispy,0,0,0,dispx,dispy : gsel 2,-1 gsel 0,1 *Lp ginfo 1 getkey kTAB,9 : if kTAB = 1 : act_id+ : if act_id>(id-1) : act_id=0 if prmx ! -1 : objsel act_id wait 10 objsel -1 : act_id = stat goto *Lp *endp if hdc_is_display!0 { hDLL=hGDI32 funcname="DeleteDC" : gosub myGetProc param.0=hdc n_param=1 gosub myFuncCall } gosub myALLDLLfree end *myALLDLLfree notesel dll_names : freed_dll="" repeat load_dll_num if load_dll_handle.cnt!0 { ll_libfree load_dll_handle.cnt if stat!0 { noteget freed_dll,cnt dialog "FreeLibrary("+freed_dll+") failed" } } loop return *myDLLload ll_libload hDLL,dllname dll_names=dll_names+dllname+"\n" load_dll_handle.load_dll_num=hDLL load_dll_num+ return *myGetProc ll_getproc F,funcname,hDLL return *myFuncCall ll_callfunc param, n_param, F ll_ret F_ret return *get_end_btn_wnd ll_getptr point : ll_ret p_point param.0=hHSPWnd : param.1=p_point ll_callfunc param,2,F_ClientToScreen ll_callfunc point,2,F_WindowFromPoint ll_ret hBtnWnd return *enable_btn_wnd param.0=hBtnWnd param.1=enable ll_callfunc param,2,F_EnableWindow return