hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
小ワザ/ウインドウシステムサンプル - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

ウインドウシステムサンプル

MDIウインドウチックなもの

自前ウインドウシステムを作る意味があるのかよく考えずに勢いで作ってみた
今も反省していない

filemod_box.as
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
!
 
 
 
 
 
 
 
 
 
-
-
!
 
 
 
 
 
 
 
 
 
 
 
 
 
-
-
|
|
!
!
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
|
-
|
|
|
|
|
|
-
|
|
|
|
|
|
|
!
|
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
 
 
 
 
 
 
 
 
 
 
 
-
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#module "box"
 
#define MAX_BOX    256
 
#define RECT_X    0
#define RECT_Y    1
#define RECT_SX    2
#define RECT_SY    3
 
; 初期化
;  box_init
; 引数
;  なし
; 戻値
;  なし
#deffunc box_init
    dim box_rect, MAX_BOX, 4
    dim box_count,1
    dim box_drag,3
 
    box_count = 0
    box_drag = 0,0,-1
    return
 
; 領域の追加
;  box_add x, y, sx, sy
; 引数
;  x = 領域のX座標
;  y = 領域のY座標
;  sx= 領域の横サイズ
;  sy= 領域の縦サイズ
; 戻値
;  追加された領域番号
#deffunc box_add int x, int y, int sx, int sy
    if box_count < MAX_BOX {
        box_rect(box_count,0) = x
        box_rect(box_count,1) = y
        box_rect(box_count,2) = sx
        box_rect(box_count,3) = sy
        box_count++
        return box_count - 1
    }
    return -1
 
; 領域の数の取得
;  box_getcount()
; 引数
;  なし
; 戻値
;  領域の数
#defcfunc box_getcount
    return box_count
 
; 領域の位置・大きさの取得
;  box_get n, x, y, sx, sy
; 引数
;  n = 領域番号
;  x = 領域のX座標
;  y = 領域のY座標
;  sx= 領域の横サイズ
;  sy= 領域の縦サイズ
; 戻値
;  なし
#deffunc box_get int n, var x, var y, var sx, var sy
    if 0 <= n {
        x = box_rect(n,0)
        y = box_rect(n,1)
        sx= box_rect(n,2)
        sy= box_rect(n,3)
    }
    return
 
; 領域の削除
;  box_del n
; 引数
;  n = 領域番号
; 戻値
;  なし
#deffunc box_del int n
    if n < 0 {
    } else : if n < box_count {
    }
    return
 
; 指定した位置に含まれる領域を返す
;  box_inrect(x, y)
; 引数
;  x = X座標の指定位置
;  y = Y座標の指定位置
; 戻値
;  領域番号
#defcfunc box_inrect int x, int y
    r = -1
    repeat box_count
        nn = box_count - 1 - cnt
        if box_rect(nn,0) <= x && x <= box_rect(nn,0)+box_rect(nn,2) {
            if box_rect(nn,1) <= y && y <= box_rect(nn,1)+box_rect(nn,3) {
                r = nn
                break
            }
        }
    loop
    return r
 
; 領域のZオーダー(=領域番号)を指定番号に変え場所を詰める
;  box_setzorder n, z
; 引数
;  n = 領域番号
;  z = 新しい領域番号
; 戻値
;  なし
#deffunc box_setzorder int n, int z
    if 0 <= n && n < box_count && 0 <= z && z < box_count && n != z {
        _x = box_rect(n,0)
        _y = box_rect(n,1)
        _sx= box_rect(n,2)
        _sy= box_rect(n,3)
        if n < z {
            repeat z - n, n
                box_rect(cnt,0) = box_rect(cnt + 1,0)
                box_rect(cnt,1) = box_rect(cnt + 1,1)
                box_rect(cnt,2) = box_rect(cnt + 1,2)
                box_rect(cnt,3) = box_rect(cnt + 1,3)
            loop
        } else {
            repeat n - z, z
                nn = n - cnt
                box_rect(nn,0) = box_rect(nn - 1,0)
                box_rect(nn,1) = box_rect(nn - 1,1)
                box_rect(nn,2) = box_rect(nn - 1,2)
                box_rect(nn,3) = box_rect(nn - 1,3)
            loop
        }
        box_rect(z,0) = _x
        box_rect(z,1) = _y
        box_rect(z,2) = _sx
        box_rect(z,3) = _sy
    }
    return
 
; 領域のドラッグを開始する
;  box_drag_start mx, my
; 引数
;  mx = マウスX座標
;  my = マウスY座標
; 戻値
;  なし
#deffunc box_drag_start int mx, int my
    nn = box_inrect(mx, my)
    if 0 <= nn && nn < box_count {
        box_drag.0 = mx - box_rect(nn,0)
        box_drag.1 = my - box_rect(nn,1)
        box_drag.2 = nn
    }
 
    return
 
; 領域をドラッグする
;  box_dragging mx, my
; 引数
;  mx = マウスX座標
;  my = マウスY座標
; 戻値
;  なし
#deffunc box_dragging int mx, int my
    if 0 <= box_drag.2 && box_drag.2 < box_count {
        box_rect(box_drag.2,0) = mx - box_drag.0
        box_rect(box_drag.2,1) = my - box_drag.1
    }
    return
 
; 領域のドラッグを終了する
;  box_drag_end
; 引数
;  なし
; 戻値
;  なし
#deffunc box_drag_end
    box_drag.2 = -1
    return
 
#global
filemod_box_sample.hsp
Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
-
|
|
|
!
-
|
|
!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include "mod_box.as"
 
#module
#deffunc draw_wnd int x, int y, int sx, int sy, int inact
    if inact : color 0,0,160 : else : color 0,0,64
    boxf x,y,x+sx,y+20
    color 192,192,192
    line x,y,x+sx,y
    line x,y,x,y+sy
    color 64,64,64
    line x+sx,y,x+sx,y+sy
    line x,y+sy,x+sx,y+sy
    color 255,255,255
    line x+1,y+1,x+sx-1,y+1
    line x+1,y+1,x+1,y+sy-1
    return
#global
 
box_init
 
repeat 10
    box_add cnt*10,cnt*10,100,100
loop
mes
    w = 10
*main
    wait w
 
//	title ""+box_inrect(mousex, mousey)
 
    stick mclick, 256, 1
    mclick = 0 != (mclick & 256)
 
    if mclick && 0 == old_mclick {
        box_setzorder box_inrect(mousex, mousey), box_getcount() - 1
        box_drag_start mousex, mousey
        w = 1
    }
    if 0 == mclick && old_mclick {
        box_drag_end
        w = 10
    }
    box_dragging mousex, mousey
 
    old_mclick = mclick
 
    gosub *draw
 
    goto *main
 
*draw
    redraw 0
    color 255,192,192
    boxf
    
    draw_tmp.4 = box_getcount()
    repeat draw_tmp.4
        box_get cnt,draw_tmp.0,draw_tmp.1,draw_tmp.2,draw_tmp.3
        draw_tmp.5 = cnt * 255 / draw_tmp.4
        color draw_tmp.5,draw_tmp.5,draw_tmp.5
        boxf draw_tmp.0,draw_tmp.1,draw_tmp.0+draw_tmp.2,draw_tmp.1+draw_tmp.3
        draw_wnd draw_tmp.0,draw_tmp.1,draw_tmp.2,draw_tmp.3,cnt==draw_tmp.4-1
    loop
    redraw 1
    return

頑張れば何か出来るかもしれないがZオーダー指定時にループがあるので多少パフォーマンスが悪いかも モジュールとサンプルとわざわざ分ける必要はなかったのかも


コメント

  • 某三桁数字の誰かさんのMMOにインスパイヤされ作ってみた -- Shark++ 2005-10-08 01:57:28 (土)
  • Shark++さん、こんにちわ。お話するの初めてですm_ _m
    すごい・・・タイトルとか自力描画だ・・・ -- kz3 2005-10-08 08:55:29 (土)
  • こんにちわです。寝ぼけながら作ったのでコアの部分以外はすごく適当(と言うか手抜き)です
    やる気があればAPIを使っていましたが... -- Shark++ 2005-10-08 11:55:11 (土)
  • すげ〜wこんな短く書けるんだ。某三桁数字の誰かさんのMMOはすごいですw -- Charlotte 2005-10-15 10:17:00 (土)
  • 三桁数字・・・で思いつくのは888さん・・・かな・・・ちょっと訪問。 -- kz3 2005-10-15 11:34:53 (土)
  • ・・・゚ロ゚・・・活動停止!?!?!?!?!?何事ですか! -- kz3 2005-10-15 11:35:38 (土)
  • (´‐`) -- 某三桁数字の誰かさん? 2006-04-12 (水) 13:35:45

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

添付ファイル:
filemod_box_sample.hsp
492件 [詳細]
filemod_box.as
637件 [詳細]
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:47:46 (2436d)