/*--------- ---------- ---------- ---------- ---------- ; http://www.setsuki.com/ ;---------- ---------- ---------- ---------- ---------- ; 使用例) #include "statusbar.as" gsel 0,-1 : screen 2 : title "ステータスバーのテスト" ; 分割ステータスバーの作成 stbmake 120, 100, -1, -1, 150 ; stbmake 以降は分割サイズを指定 ; -1 は、フリーサイズ ; 最大、6項目まで指定可能 ; 分割しない場合は、stbmake だけで良い ; ステータスバーに文字列を設定 stbmes 0, "テスト1" stbmes 1, "テスト2" stbmes 2, "テスト3" ; ステータスバーの高さを取得 size = stbsize() ; 画面を黒く塗りつぶす boxf 10, 10, ginfo_winx-10, ginfo_winy-size-10 oncmd gosub *OnSize ,WM_SIZE stop *OnSize ; ステータスバーのサイズを変更 stbchange return ;---------- ---------- ---------- ---------- ---------*/ #ifdef __hsp30__ #ifndef __USER32__ #define global __USER32__ #uselib "USER32.DLL" #func global GetWindowRect "GetWindowRect" sptr,sptr #endif #endif #ifndef WM_SIZE #define global WM_SIZE 0x0005 ;ウィンドウサイズ変更 #endif ;-------------------------------------- ; ステータスバーのコマンド ;-------------------------------------- #define global SB_SETPARTS 0x0404 #define global SB_SETTEXT 0x0401 #define global SBT_NOBORDERS 0x0100 #define global SBT_POPOUT 0x0200 #module "StatusBar" ;-------------------------------------- ; ステータスバーを作成する ;-------------------------------------- #deffunc stbmake int v1, int v2, int v3, int v4, int v5, int v6 winobj "msctls_statusbar32","",0,0x50000003 hStatus = objinfo(stat,2) : hidden=0 ;-------------------------------------- ; セルを設定して描画する ;-------------------------------------- #deffunc stbdraw int v1, int v2, int v3, int v4, int v5, int v6 ; セルのサイズを保存 save = v1, v2, v3, v4, v5, v6 ;-------------------------------------- ; ステータスバーを描画する ;-------------------------------------- #deffunc stbchange if( length(save) > 0 ) { dim SParts,6 : len=0 : flag=0 memcpy SParts, save, 24, 0, 0 ; セルのサイズを取得する wid=0 repeat 5 if( SParts.cnt == 0 ) : break if( SParts.cnt == -1 ) : flag++ : else : wid += SParts.cnt len++ loop ; サイズが -1 の場合 if( flag > 0 ) : flag = (ginfo_winx-wid)/flag ; セルのサイズを変更 wid=0 repeat len if( SParts.cnt == -1 ) : SParts.cnt = flag SParts.cnt += wid : wid = SParts.cnt loop ; セルのサイズを設定する sendmsg hStatus, SB_SETPARTS, len, varptr(SParts) } sendmsg hStatus, WM_SIZE, 0, 0 return ;-------------------------------------- ; ステータスバーに文字列設定 ;-------------------------------------- #deffunc stbmes int v1, str name SMes = name sendmsg hStatus, SB_SETTEXT, v1, varptr(SMes) return ;-------------------------------------- ; ステータスバーのサイズを取得 ;-------------------------------------- #defcfunc stbsize if( hStatus == 0 ) : return 0 dim SParts,6 GetWindowRect hStatus,varptr(SParts) return SParts.3-SParts.1 ;-------------------------------------- #global