〜 グラフィック 〜
RGBの3要素を1つの変数で扱う

1つの変数に複数の情報を詰め込むコチラのサンプルは数値変数に最大32個の情報を扱えましたが、
チェックボックスのON・OFF等で利用できる程度の0と1の2通りしか保持できません。
今回は、0〜255の256通りあるRGB色要素を配列ではない4バイトの数値変数で扱うというものです。
256通りは8ビットで表せるので、「RGB3要素×8ビット=24ビット」を使用します。
4バイトは32ビットなので8ビット余りますが、今回はそのままにしておきます…。
もし、この8ビットに何か利用目的があるのならどうぞご自由にお使いください。
下記サンプルはモジュールではなくマクロなので、HSP2でもHSP3の関数のように書けますが、
HSP2の仕様により文字列内での演算は行えません。
	
 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
	// RGBを最大5パターン扱ってみる
	pattern = 5
	// RGB格納マクロ
	dim _rgb, pattern
#define setrgb(%1, %2 = 0, %3 = 0, %4 = 0) : _rgb.%1 = %4 << 16 + (%3 << 8) + %2
#define ctype getrgb(%1, %2 = 0) _rgb.%1 >> (%2 * 8) & 0xFF
	// 表示準備
	dim col, 1
	sdim label, 128
	repeat pattern, 1
		if cnt > 1 : label += "\n"
		label += "No." + cnt
	loop
	objsize 80, 25
	pos 100, 30 : combox index, 100, label
	pos 100, 60 : button "S e t", *set
	pos 100, 90 : button "G e t", *get
	stop

*set
	dialog "", 33
	if stat : setrgb index, rval, gval, bval
	stop

*get
	col = getrgb(index, 0) : tmp  = "赤:" + col + " "
	col = getrgb(index, 1) : tmp += "青:" + col + " "
	col = getrgb(index, 2) : tmp += "緑:" + col
	dialog tmp, , "No" + index + "の格納情報"
	stop
 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
	// RGBを最大5パターン扱ってみる
	pattern = 5
	// RGB格納マクロ
	dim _rgb, pattern
#define setrgb(%1, %2 = 0, %3 = 0, %4 = 0) : _rgb.%1 = (%4 << 16) + (%3 << 8) + %2
#define ctype getrgb(%1, %2 = 0) ((_rgb.%1 >> (%2 * 8)) & 0xFF)
	// 表示準備
	sdim label, 128
	repeat pattern, 1
		if cnt > 1 : label += "\n"
		label += "No." + cnt
	loop
	objsize 80, 25
	pos 100, 30 : combox index, 100, label
	pos 100, 60 : button gosub "S e t", *set
	pos 100, 90 : button gosub "G e t", *get
	stop

*set
	dialog "", 33
	if stat : setrgb index, ginfo_r, ginfo_g, ginfo_b
	return

*get
	tmp  = "赤:" + getrgb(index, 0) + " "
	tmp += "青:" + getrgb(index, 1) + " "
	tmp += "緑:" + getrgb(index, 2)
	dialog tmp, , "No" + index + "の格納情報"
	return