| 
 | 
 
 
 
 
 |  | 
2024/3/23(Sat) 13:25:24|NO.101439 
llmod3を使ったtrackboxですが、ツマミの色、trackboxの背景色を変更することは出来るでしょうか?
 
 
 ご教授ください、よろしくお願い致します。
 
 | 
 
 
 
 |  | 
2024/3/23(Sat) 22:17:34|NO.101445 
つまみの色はわかりませんが、背景色についてはWM_CTLCOLORSTATICを捕まえることでできるようです。 #include "llmod3.hsp"
#include "trackbox.hsp"
#include "gdi32.as"	//CreateSolidBrushとDeleteObjectを使うのに必要
#const WM_CTLCOLORSTATIC 0x0138
CreateSolidBrush 0x8888FF	//背景色は0xBBGGRRの形で指定する。(RRGGBBではないことに注意)
h_brush=stat
onexit *exit
trackbox 200,30
h_track=objinfo(stat,2)	//トラックバーのハンドル
oncmd gosub *ccs,WM_CTLCOLORSTATIC
stop
*ccs
	if lparam=h_track : return h_brush
	return
*exit
	DeleteObject h_brush	//終了前にブラシを削除する必要がある
	end
 | 
 
 
 |  | 
2024/3/24(Sun) 07:41:54|NO.101446 
沢渡 さま
 いつもお世話になります。
 サンプル提示して頂きありがとうございます。
 動作確認出来ました。
 
 このプログラムですが、何個かトラックボックスを設置して色を付けると
 色が付く場合と、付かなかったりする場合があります。
 これはredraw 0/1のような、再描画方法ありますでしょうか?
 user32のRedrawWindowやっても上手くいきませんでした。
 
 ご確認よろしくお願いします。
 
 | 
 
 
 |  | 
2024/3/24(Sun) 13:20:20|NO.101447 
こんな感じで7個トラックボックスを設置してみましたが、特に不具合は発生しませんでした。 
(当方の環境はWindows11です) 
何か他の処理が絡んでいたりするのでしょうか?
 #include "llmod3.hsp"
#include "trackbox.hsp"
#include "gdi32.as"	//CreateSolidBrushとDeleteObjectを使うのに必要
#const WM_CTLCOLORSTATIC 0x0138
dim colors,7
colors=0x0000FF,0x00FF00,0x00FFFF,0xFF0000,0xFF00FF,0xFFFF00,0xFFFFFF
dim h_brush,7
dim h_track,7
repeat 7
	CreateSolidBrush colors(cnt)
	h_brush(cnt)=stat
	trackbox 200,30
	h_track(cnt)=objinfo(stat,2)
loop
onexit *exit
oncmd gosub *ccs,WM_CTLCOLORSTATIC
stop
*ccs
	flag=0 : res=0
	repeat 7
		if lparam=h_track(cnt) : flag=1 : res=h_brush(cnt) : break
	loop
	if flag : return res
	return
*exit
	repeat 7
		DeleteObject h_brush(cnt)
	loop
	end
 | 
 
 
 |  | 
2024/3/24(Sun) 17:22:15|NO.101450 
沢渡 さま 
お世話になります。 
沢渡さまが提示していただきましたスクリプトでは、不具合出ませんでした。 
以下に再現するスクリプトを提示します。 
これですと、F5にて実行時、赤く描画される場合とされない場合があります
 
ご確認よろしくお願いします。
 #include "llmod3/llmod3.hsp"
#include "llmod3/trackbox.hsp"
	#define OSCX 800
	#define OSCY 400
	
	#define SPACE_UP    050
	#define SPACE_DOWN  050
	#define SPACE_LEFT  020
	#define SPACE_RIGHT 020
	#define TRACKBOX_X 200
	#define TRACKBOX_Y 030
	#define YAMP 1.0*OSCY/2
	#define MAX_CHOUHASUU 25
	#define WINX (OSCX+SPACE_LEFT+SPACE_RIGHT+500)
	#define WINY (TRACKBOX_Y*MAX_CHOUHASUU+SPACE_UP+SPACE_DOWN)
	#define ctype MAXF(%1,%2) (1.0*(%1)>=1.0*(%2))*1.0*(%1)+(1.0*(%1)<1.0*(%2))*1.0*(%2)
	#define ctype MINF(%1,%2) (1.0*(%1)<=1.0*(%2))*1.0*(%1)+(1.0*(%1)>1.0*(%2))*1.0*(%2)
	#define WM_CTLCOLORSTATIC 0x0138
#module
	#uselib "user32.dll"
	#func global DrawText "DrawTextA" sptr,sptr,sptr,sptr,sptr
	#uselib "gdi32.dll"
	//#func global CreateSolidBrush "CreateSolidBrush" sptr
	#func ExtCreatePen "ExtCreatePen" sptr,sptr,sptr,sptr,sptr
	//#func global DeleteObject "DeleteObject" sptr
	#define ctype RGB(%1,%2,%3) (%1 | %2 << 8 | %3 << 16)
#global
	#uselib "gdi32.dll"
	#func global CreateSolidBrush "CreateSolidBrush" sptr
	#func global DeleteObject "DeleteObject" sptr
	dim colors,30
	colors(00) = 0x0000FF
	colors(01) = 0xF0F0F0
	colors(02) = 0xF0F0F0
	colors(03) = 0x8888FF
	colors(04) = 0xF0F0F0
	colors(05) = 0x8888FF
	colors(06) = 0xF0F0F0
	colors(07) = 0x8888FF
	colors(08) = 0xF0F0F0
	colors(09) = 0x8888FF
	colors(10) = 0xF0F0F0
	colors(11) = 0x8888FF
	colors(12) = 0xF0F0F0
	colors(13) = 0x8888FF
	colors(14) = 0xF0F0F0
	colors(15) = 0x8888FF
	colors(16) = 0xF0F0F0
	colors(17) = 0x8888FF
	colors(18) = 0xF0F0F0
	colors(19) = 0x8888FF
	colors(20) = 0xF0F0F0
	colors(21) = 0x8888FF
	colors(22) = 0xF0F0F0
	colors(23) = 0x8888FF
	colors(24) = 0xF0F0F0
	colors(25) = 0x8888FF
	screen 0,WINX,WINY,,(ginfo_dispx-WINX)/2,(ginfo_dispy-WINY)/2
	font "MS 明朝",20
	// 数値データの作成
	ddim harminfo,MAX_CHOUHASUU+1,361
	repeat MAX_CHOUHASUU,1
		i = cnt
		repeat 360
			j = cnt
			harminfo(i,j) = 1.0*YAMP*sin(deg2rad(j*(i)))
		loop
	loop
	color 000,000,000
	boxf
	mes "000.0%"
	moji5szx = ginfo_mesx
	moji5szy = ginfo_mesy
	repeat MAX_CHOUHASUU
		pos OSCX+SPACE_LEFT+SPACE_RIGHT+050,TRACKBOX_Y*cnt+010+050
		color 255,255,255
		s_chouhasuu  = "第"
		if ( cnt+1 < 10 ) : s_chouhasuu += " "
		s_chouhasuu += ""+(cnt+1)+"調波:"
		mes s_chouhasuu
		if ( cnt == 0 ) {
			ganyuuposx = ginfo_cx+ginfo_mesx
			ganyuuposy = ginfo_cy-ginfo_mesy
		}
		
		CreateSolidBrush colors(cnt+1)	//背景色は0xBBGGRRの形で指定する。(RRGGBBではないことに注意)
		h_brush(cnt) = stat
		pos ginfo_cx+ginfo_mesx+moji5szx+020,TRACKBOX_Y*cnt+050
		trackbox TRACKBOX_X,TRACKBOX_Y,0
		if ( cnt == 0 ) : trackboxid = stat
		h_track(cnt) = objinfo(stat,2)	//トラックバーのハンドル
		trackrng 0,1000
		bar(cnt) = 0
		if ( cnt == 0 ) : trackpos 1000 : bar(cnt) = 1000
	loop
	onexit *exit
	oncmd gosub *ccs,WM_CTLCOLORSTATIC
stop
*draw_fundwave
	//CreateDotpen 0,000,000,255,3
	line OSCX\360/2+SPACE_LEFT,ginfo_winy/2,OSCX\360/2+SPACE_LEFT+360*(OSCX/360),ginfo_winy/2
	repeat 360
		color 000,255,000
		x = OSCX\360/2+SPACE_LEFT+cnt*(OSCX/360)
		y = ginfo_winy/2-YAMP*sin(deg2rad(cnt))
		if ( cnt != 0 ) {
			//CreateDotpen 1,000,255,000,1
			line x,ginfo_winy/2,x,y
			// line _x,_y,x,y
		}
		_x = x
		_y = y
	loop
return
*ganyuuritsu
	// 含有率をトラックボックスより取得
	gosub *getganyuuritsu
	color 000,000,000
	boxf ganyuuposx,ganyuuposy,ganyuuposx+moji5szx,ginfo_winy
	color 255,255,255
	repeat MAX_CHOUHASUU
		pos ganyuuposx , ganyuuposy + TRACKBOX_Y*cnt
		s_bar = ""+strf("%3.01f",0.1*bar(cnt))
		if ( 0.1*bar(cnt) < 100.0 ) : s_bar = " "+s_bar
		if ( 0.1*bar(cnt) <  10.0 ) : s_bar = " "+s_bar
		mes ""+s_bar+"%"
	loop
return
*getganyuuritsu
	// 含有率をトラックボックスより取得
	repeat MAX_CHOUHASUU
		sel_trackbox cnt
		trackpos ,1
		bar(cnt) = stat
	loop
return
*ccs
	handle = 0
	repeat MAX_CHOUHASUU
		if ( lparam == h_track(cnt) ) : handle = h_brush(cnt) : break
	loop
	return handle
*exit
	repeat MAX_CHOUHASUU
		DeleteObject h_brush(cnt)	//終了前にブラシを削除する必要がある
	loop
end
|  
 |  | 
 
 
 |  | 
2024/3/24(Sun) 18:51:58|NO.101452 
不具合とは「本来なら3以上の奇数のトラックボックスが最初から赤くなる筈が、 
操作する時になって初めて赤くなる」というものでしょうか? 
それならば、おそらくtrackrngなりtrackposなりを実行したところで 
トラックボックスの描画が行われるが、その時点ではoncmdが有効になっていない 
せいなのではないかな、と推測します。 
このように「トラックボックスの作成→oncmd実行→トラックボックスの設定」という 
流れでやるようにしてみましたが、どうでしょうか?
 #include "llmod3.hsp"
#include "trackbox.hsp"
	#define OSCX 800
	#define OSCY 400
	
	#define SPACE_UP    050
	#define SPACE_DOWN  050
	#define SPACE_LEFT  020
	#define SPACE_RIGHT 020
	#define TRACKBOX_X 200
	#define TRACKBOX_Y 030
	#define YAMP 1.0*OSCY/2
	#define MAX_CHOUHASUU 25
	#define WINX (OSCX+SPACE_LEFT+SPACE_RIGHT+500)
	#define WINY (TRACKBOX_Y*MAX_CHOUHASUU+SPACE_UP+SPACE_DOWN)
	#define ctype MAXF(%1,%2) (1.0*(%1)>=1.0*(%2))*1.0*(%1)+(1.0*(%1)<1.0*(%2))*1.0*(%2)
	#define ctype MINF(%1,%2) (1.0*(%1)<=1.0*(%2))*1.0*(%1)+(1.0*(%1)>1.0*(%2))*1.0*(%2)
	#define WM_CTLCOLORSTATIC 0x0138
#module
	#uselib "user32.dll"
	#func global DrawText "DrawTextA" sptr,sptr,sptr,sptr,sptr
	#uselib "gdi32.dll"
	//#func global CreateSolidBrush "CreateSolidBrush" sptr
	#func ExtCreatePen "ExtCreatePen" sptr,sptr,sptr,sptr,sptr
	//#func global DeleteObject "DeleteObject" sptr
	#define ctype RGB(%1,%2,%3) (%1 | %2 << 8 | %3 << 16)
#global
	#uselib "gdi32.dll"
	#func global CreateSolidBrush "CreateSolidBrush" sptr
	#func global DeleteObject "DeleteObject" sptr
	dim colors,30
	colors(00) = 0x0000FF
	colors(01) = 0xF0F0F0
	colors(02) = 0xF0F0F0
	colors(03) = 0x8888FF
	colors(04) = 0xF0F0F0
	colors(05) = 0x8888FF
	colors(06) = 0xF0F0F0
	colors(07) = 0x8888FF
	colors(08) = 0xF0F0F0
	colors(09) = 0x8888FF
	colors(10) = 0xF0F0F0
	colors(11) = 0x8888FF
	colors(12) = 0xF0F0F0
	colors(13) = 0x8888FF
	colors(14) = 0xF0F0F0
	colors(15) = 0x8888FF
	colors(16) = 0xF0F0F0
	colors(17) = 0x8888FF
	colors(18) = 0xF0F0F0
	colors(19) = 0x8888FF
	colors(20) = 0xF0F0F0
	colors(21) = 0x8888FF
	colors(22) = 0xF0F0F0
	colors(23) = 0x8888FF
	colors(24) = 0xF0F0F0
	colors(25) = 0x8888FF
	screen 0,WINX,WINY,,(ginfo_dispx-WINX)/2,(ginfo_dispy-WINY)/2
	font "MS 明朝",20
	// 数値データの作成
	ddim harminfo,MAX_CHOUHASUU+1,361
	repeat MAX_CHOUHASUU,1
		i = cnt
		repeat 360
			j = cnt
			harminfo(i,j) = 1.0*YAMP*sin(deg2rad(j*(i)))
		loop
	loop
	color 000,000,000
	boxf
	mes "000.0%"
	moji5szx = ginfo_mesx
	moji5szy = ginfo_mesy
	dim trackid_list,30
	repeat MAX_CHOUHASUU
		pos OSCX+SPACE_LEFT+SPACE_RIGHT+050,TRACKBOX_Y*cnt+010+050
		color 255,255,255
		s_chouhasuu  = "第"
		if ( cnt+1 < 10 ) : s_chouhasuu += " "
		s_chouhasuu += ""+(cnt+1)+"調波:"
		mes s_chouhasuu
		if ( cnt == 0 ) {
			ganyuuposx = ginfo_cx+ginfo_mesx
			ganyuuposy = ginfo_cy-ginfo_mesy
		}
		
		CreateSolidBrush colors(cnt+1)	//背景色は0xBBGGRRの形で指定する。(RRGGBBではないことに注意)
		h_brush(cnt) = stat
		pos ginfo_cx+ginfo_mesx+moji5szx+020,TRACKBOX_Y*cnt+050
		trackbox TRACKBOX_X,TRACKBOX_Y,0
		if ( cnt == 0 ) : trackboxid = stat
		trackid_list(cnt)=stat
		h_track(cnt) = objinfo(stat,2)	//トラックバーのハンドル
	loop
	onexit *exit
	oncmd gosub *ccs,WM_CTLCOLORSTATIC
	repeat MAX_CHOUHASUU
		sel_trackbox trackid_list(cnt)
		trackrng 0,1000
		bar(cnt) = 0
		if ( cnt == 0 ) : trackpos 1000 : bar(cnt) = 1000
	loop
	
stop
*draw_fundwave
	//CreateDotpen 0,000,000,255,3
	line OSCX\360/2+SPACE_LEFT,ginfo_winy/2,OSCX\360/2+SPACE_LEFT+360*(OSCX/360),ginfo_winy/2
	repeat 360
		color 000,255,000
		x = OSCX\360/2+SPACE_LEFT+cnt*(OSCX/360)
		y = ginfo_winy/2-YAMP*sin(deg2rad(cnt))
		if ( cnt != 0 ) {
			//CreateDotpen 1,000,255,000,1
			line x,ginfo_winy/2,x,y
			// line _x,_y,x,y
		}
		_x = x
		_y = y
	loop
return
*ganyuuritsu
	// 含有率をトラックボックスより取得
	gosub *getganyuuritsu
	color 000,000,000
	boxf ganyuuposx,ganyuuposy,ganyuuposx+moji5szx,ginfo_winy
	color 255,255,255
	repeat MAX_CHOUHASUU
		pos ganyuuposx , ganyuuposy + TRACKBOX_Y*cnt
		s_bar = ""+strf("%3.01f",0.1*bar(cnt))
		if ( 0.1*bar(cnt) < 100.0 ) : s_bar = " "+s_bar
		if ( 0.1*bar(cnt) <  10.0 ) : s_bar = " "+s_bar
		mes ""+s_bar+"%"
	loop
return
*getganyuuritsu
	// 含有率をトラックボックスより取得
	repeat MAX_CHOUHASUU
		sel_trackbox cnt
		trackpos ,1
		bar(cnt) = stat
	loop
return
*ccs
	handle = 0 : flag=0
	repeat MAX_CHOUHASUU
		if ( lparam == h_track(cnt) ) : handle = h_brush(cnt) : flag=1 : break
	loop
	if flag : return handle
	return	//該当なしの場合は引数なしのreturnを行う
*exit
	repeat MAX_CHOUHASUU
		DeleteObject h_brush(cnt)	//終了前にブラシを削除する必要がある
	loop
end
|  
 |  | 
 
 
 |  | 
2024/3/24(Sun) 21:08:58|NO.101456 
沢渡 さま
 いつもありがとうございます。
 >不具合とは「本来なら3以上の奇数のトラックボックスが最初から赤くなる筈が、
 >操作する時になって初めて赤くなる」というものでしょうか?
 
 はい、その通りです、説明がへたで申し訳ありませんでした。
 
 >それならば、おそらくtrackrngなりtrackposなりを実行したところで
 >トラックボックスの描画が行われるが、その時点ではoncmdが有効になっていない
 >せいなのではないかな、と推測します。
 
 oncmdの有効にする位置がダメだったのですね、お手数おかけしてしまい、すみませんでした
 希望するとおり動くようになりました、ありがとうございました。
 
 | 
 
 
 |