More ... | 編集履歴:過去のバージョン2015/03/15 04:36:25 JST時点でのHSP3標準ライブラリ:object.asの内容[[$$toc]] - →[[HSP3標準ライブラリ]]に戻る - →[[HSPWiKi]]に戻る ---- llmod.asに代わるオブジェクト作成/管理命令群です。 ---- * object.as {{{ ; ------------------------------------------------------------------------ ; HSP オブジェクト モジュール/マクロ for HSP ver3.4 ; このモジュールは各オブジェクトモジュールの核となる ; オブジェクト管理命令群です。 ; Win32 API 関数の宣言を省略することとウィンドウの操作を ; 簡略化することを目的とした、ラッパーモジュールです。 ; ------------------------------------------------------------------------ #ifndef INC__OBJECT_AS #define global INC__OBJECT_AS #module obj ; 内部で使用する Win32 API 関数群 #uselib "user32.dll" #func GetWindowLong@obj "GetWindowLongA" int,int #func SetWindowLong@obj "SetWindowLongA" int,int,int #func SetWindowPos@obj "SetWindowPos" int,int,int,int,int,int,int #func SendMessage@obj "SendMessageA" int,int,sptr,sptr #func EnableWindow@obj "EnableWindow" int,int #func ShowWindow@obj "ShowWindow" int,int ; Win32 API 定義の定数名 ; GetWindowLong / SetWindowLong 関数のパラメータ値 #const GWL_WNDPROC@obj -4 #const GWL_ID@obj -12 #const GWL_STYLE@obj -16 #const GWL_EXSTYLE@obj -20 #const GWL_USERDATA@obj -21 ; ウィンドウスタイル / 拡張ウィンドウスタイル #const WS_BORDER@obj $00800000 #const WS_CAPTION@obj $00C00000 #const WS_CHILD@obj $40000000 #const WS_CHILDWINDOW@obj $40000000 #const WS_CLIPCHILDREN@obj $02000000 #const WS_CLIPSIBLINGS@obj $04000000 #const WS_DISABLED@obj $08000000 #const WS_DLGFRAME@obj $00400000 #const WS_EX_ACCEPTFILES@obj $00000010 #const WS_EX_APPWINDOW@obj $00040000 #const WS_EX_CLIENTEDGE@obj $00000200 #const WS_EX_CONTEXTHELP@obj $00000400 #const WS_EX_CONTROLPARENT@obj $00010000 #const WS_EX_DLGMODALFRAME@obj $00000001 #const WS_EX_LAYERED@obj $00080000 #const WS_EX_LAYOUTRTL@obj $00400000 #const WS_EX_LEFT@obj $00000000 #const WS_EX_LEFTSCROLLBAR@obj $00004000 #const WS_EX_LTRREADING@obj $00000000 #const WS_EX_MDICHILD@obj $00000040 #const WS_EX_NOACTIVATE@obj $08000000 #const WS_EX_NOINHERITLAYOUT@obj $00100000 #const WS_EX_NOPARENTNOTIFY@obj $00000004 #const WS_EX_OVERLAPPEDWINDOW@obj $00000300 #const WS_EX_PALETTEWINDOW@obj $00000188 #const WS_EX_RIGHT@obj $00001000 #const WS_EX_RIGHTSCROLLBAR@obj $00000000 #const WS_EX_RTLREADING@obj $00002000 #const WS_EX_STATICEDGE@obj $00020000 #const WS_EX_TOOLWINDOW@obj $00000080 #const WS_EX_TOPMOST@obj $00000008 #const WS_EX_TRANSPARENT@obj $00000020 #const WS_EX_WINDOWEDGE@obj $00000100 #const WS_GROUP@obj $00020000 #const WS_HSCROLL@obj $00100000 #const WS_ICONIC@obj $20000000 #const WS_MAXIMIZE@obj $01000000 #const WS_MAXIMIZEBOX@obj $00010000 #const WS_MINIMIZE@obj $20000000 #const WS_MINIMIZEBOX@obj $00020000 #const WS_OVERLAPPED@obj $00000000 #const WS_OVERLAPPEDWINDOW@obj $00CF0000 #const WS_POPUP@obj $80000000 #const WS_POPUPWINDOW@obj $80880000 #const WS_SIZEBOX@obj $00040000 #const WS_SYSMENU@obj $00080000 #const WS_TABSTOP@obj $00010000 #const WS_THICKFRAME@obj $00040000 #const WS_TILED@obj $00000000 #const WS_TILEDWINDOW@obj $00CF0000 #const WS_VISIBLE@obj $10000000 #const WS_VSCROLL@obj $00200000 ; SetWindowPos 関数のパラメータ値 #const SWP_NOSIZE@obj 1 #const SWP_NOMOVE@obj 2 #const SWP_NOZORDER@obj 4 #const SWP_FRAMECHANGED@obj $20 ; HSP object モジュール専用の定数/マクロ #define ctype hobj@obj(%1) objinfo@hsp(%1,2) #define NONE@obj #const _WS_HSPOBJECT@obj WS_CHILD@obj|WS_VISIBLE@obj #const _SWP_MOVESIZE@obj SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj #const _SWP_MOVE@obj SWP_NOSIZE@obj|SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj #const _SWP_SIZE@obj SWP_NOMOVE@obj|SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj #const _SWP_STYLE@obj SWP_NOSIZE@obj|SWP_NOMOVE@obj|SWP_NOZORDER@obj|SWP_FRAMECHANGED@obj ; ------------------------------------------------------------------------ ; makeobj - オブジェクトの作成 ; ; makeobj p1, p2, p3, [p4], [p5] ; p1: ウィンドウクラス名 ; p2: ウィンドウ名 ; p3: ウィンドウスタイル ; p4: 拡張ウィンドウスタイル ; p5: 幅 (省略時 objsize 値) ; p6: 高さ(省略時 objsize 値) ; ; * ウィンドウスタイルには WS_CHILD 属性および WS_CHILD 属性が ; 自動的に追加されます。 ; * オブジェクトの子ウィンドウIDは (オブジェクトID + $4000) に ; 設定されます。 ; ------------------------------------------------------------------------ #deffunc makeobj str wc, str wt, int st, int exst, int sx, int sy winobj wc, wt, exst, st|_WS_HSPOBJECT@obj, sx, sy if stat < 0 : return id = stat ; 子ウィンドウIDを (オブジェクトID + $4000) にする SetWindowLong@obj hobj@obj(id), GWL_ID@obj, id|$4000 return id ; ------------------------------------------------------------------------ ; objmove - オブジェクトの移動(およびサイズを変更) ; ; objmove p1, p2, p3, [p4], [p5] ; p1: オブジェクトID ; p2: 移動先のX座標 ; p3: 移動先のY座標 ; p4: 変更後の幅 ; p5: 変更後の高さ ; ; p4, p5 の少なくとも一方が 0 または省略時は移動のみ ; ------------------------------------------------------------------------ #define global objmove(%1,%2,%3,%4=0,%5=0) _objmove %1, %2, %3, %4, %5 #deffunc _objmove int p1, int p2, int p3, int p4, int p5 SetWindowPos@obj hobj@obj(p1),0,p2,p3,p4,p5, _SWP_MOVE@obj-((p4)*(p5)!=0) return ; ------------------------------------------------------------------------ ; objresize - オブジェクトのサイズを変更 ; ; objresize p1, p2, p3 ; p1: オブジェクトID ; p2: 変更後の幅 ; p3: 変更後の高さ ; ------------------------------------------------------------------------ #deffunc objresize int p1, int p2, int p3 SetWindowPos@obj hobj@obj(p1),0,0,0,p2,p3,_SWP_SIZE@obj return ; ------------------------------------------------------------------------ ; objsendmsg - オブジェクトにメッセージを送信 ; ; objsendmsg p1, p2, p3, p4 ; p1: オブジェクトID ; p2: メッセージID ; p3: wParam ; p4: lParam ; ------------------------------------------------------------------------ #deffunc objsendmsg int p1, int p2, int p3, int p4 SendMessage@obj hobj@obj(p1),p2,p3,p4 return ; sendmsg 命令で sptr パラメータ指定が可能になれば下のものでOK ; sendmsg hobj@obj(%1),%2,%3,%4 ; ------------------------------------------------------------------------ ; objsetstyle - オブジェクトのウィンドウスタイルを設定 ; ; objsetstyle p1, p2, p3 ; p1: オブジェクトID ; p2: 新しいスタイル ; p3: 再描画フラグ(視覚スタイルの変更時に必要) ; ------------------------------------------------------------------------ #deffunc objsetstyle int objid, int style, int fredraw SetWindowLong@obj hobj@obj(objid),GWL_STYLE@obj,style if fredraw { SetWindowPos@obj hobj@obj(objid),0,0,0,0,0,_SWP_STYLE@obj } return ;#define global objsetstyle(%1,%2) \ ; SetWindowLong@obj hobj@obj(%1),GWL_STYLE@obj,%2: \ ; SetWindowPos@obj hobj@obj(%1),0,0,0,0,0,_SWP_STYLE@obj ; ------------------------------------------------------------------------ ; objgetstyle - オブジェクトのウィンドウスタイルを取得(stat に格納) ; ; objgetstyle p1 ; p1: オブジェクトID ; ------------------------------------------------------------------------ #deffunc objgetstyle int p1 GetWindowLong@obj hobj@obj(p1),GWL_STYLE@obj return stat ; ------------------------------------------------------------------------ ; objaddstyle - オブジェクトのウィンドウスタイルを付加 ; ; objaddstyle p1, p2, p3 ; p1: オブジェクトID ; p2: 付け加えるスタイル ; p3: 再描画フラグ(視覚スタイルの変更時に必要) ; ------------------------------------------------------------------------ #define global objaddstyle(%1,%2,%3=NONE@obj) _objaddstyle %1, %2, %3 #deffunc _objaddstyle int p1, int p2, int p3 objgetstyle p1:objsetstyle p1,stat|(p2),p3 return ; ------------------------------------------------------------------------ ; objridstyle - オブジェクトのウィンドウスタイルを除去 ; ; objridstyle p1, p2, p3 ; p1: オブジェクトID ; p2: 取り除くスタイル ; p3: 再描画フラグ(視覚スタイルの変更時に必要) ; ------------------------------------------------------------------------ #define global objridstyle(%1,%2,%3=NONE@obj) _objridstyle %1, %2, %3 #deffunc _objridstyle int p1, int p2, int p3 objgetstyle p1:objsetstyle p1, stat|(p2)^(p2),p3 return ; ------------------------------------------------------------------------ ; objsetexstyle - オブジェクトの拡張ウィンドウスタイルを設定 ; ; objsetexstyle p1, p2, p3 ; p1: オブジェクトID ; p2: 新しいスタイル ; p3: 再描画フラグ(視覚スタイルの変更時に必要) ; ------------------------------------------------------------------------ #deffunc objsetexstyle int objid, int style, int fredraw SetWindowLong@obj hobj@obj(objid),GWL_EXSTYLE@obj,style if fredraw { SetWindowPos@obj hobj@obj(objid),0,0,0,0,0,_SWP_STYLE@obj } return ;#define global objsetexstyle(%1,%2) \ ; SetWindowLong@obj hobj@obj(%1),GWL_EXSTYLE@obj,%2: \ ; SetWindowPos@obj hobj@obj(%1),0,0,0,0,0,_SWP_STYLE@obj ; ------------------------------------------------------------------------ ; objgetexstyle - オブジェクトの拡張ウィンドウスタイルを取得(stat に格納) ; ; objgetexstyle p1 ; p1: オブジェクトID ; ------------------------------------------------------------------------ #deffunc objgetexstyle int p1 GetWindowLong@obj hobj@obj(p1),GWL_EXSTYLE@obj return ; ------------------------------------------------------------------------ ; objaddexstyle - オブジェクトの拡張ウィンドウスタイルを付加 ; ; objaddexstyle p1, p2, p3 ; p1: オブジェクトID ; p2: 付け加えるスタイル ; p3: 再描画フラグ(視覚スタイルの変更時に必要) ; ------------------------------------------------------------------------ #define global objaddexstyle(%1,%2,%3=NONE@obj) _objaddexstyle %1, %2, %3 #deffunc _objaddexstyle int p1, int p2, int p3 objgetexstyle p1:objsetexstyle p1,stat|(p2),p3 return ; ------------------------------------------------------------------------ ; objridexstyle - オブジェクトの拡張ウィンドウスタイルを除去 ; ; objridexstyle p1, p2, p3 ; p1: オブジェクトID ; p2: 取り除くスタイル ; p3: 再描画フラグ(視覚スタイルの変更時に必要) ; ------------------------------------------------------------------------ #define global objridexstyle(%1,%2,%3=NONE@obj) _objridexstyle %1, %2, %3 #deffunc _objridexstyle int p1, int p2, int p3 objgetexstyle p1:objsetexstyle p1, stat|(p2)^(p2),p3 return ; ------------------------------------------------------------------------ ; objenable - オブジェクトの使用可能状態を設定 ; ; objenable p1, p2 ; p1: オブジェクトID ; p2: 1:有効 0:無効 (省略時は 1) ; ------------------------------------------------------------------------ ;#define global objenable(%1,%2=1) _objenable %1, %2 ;#deffunc _objenable int p1, int p2 ; EnableWindow@obj hobj@obj(p1),p2 ; return ; ------------------------------------------------------------------------ ; objshow - オブジェクトの表示状態を設定 ; ; objshow p1, p2 ; p1: オブジェクトID ; p2: 1:表示 0:非表示 (省略時は 1) ; ------------------------------------------------------------------------ #define global objshow(%1,%2=1) _objshow %1, %2 #deffunc _objshow int p1, int p2 ShowWindow@obj hobj@obj(p1),p2 return #global #endif ; !defined(INC__OBJECT_AS) }}} * 派生モジュール ;; [[HSP3標準ライブラリ:各コントロール.as]] |