[トップ][一覧][最近の更新]

編集履歴:過去のバージョン

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]]