|
|
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の有効にする位置がダメだったのですね、お手数おかけしてしまい、すみませんでした
希望するとおり動くようになりました、ありがとうございました。
|
|