HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2024
0323
Area39trackboxのつまみ色変更、背景色を変更したい6解決


Area39

リンク

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



Area39

リンク

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



Area39

リンク

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



Area39

リンク

2024/3/24(Sun) 21:08:58|NO.101456

沢渡 さま

いつもありがとうございます。
>不具合とは「本来なら3以上の奇数のトラックボックスが最初から赤くなる筈が、
>操作する時になって初めて赤くなる」というものでしょうか?

はい、その通りです、説明がへたで申し訳ありませんでした。

>それならば、おそらくtrackrngなりtrackposなりを実行したところで
>トラックボックスの描画が行われるが、その時点ではoncmdが有効になっていない
>せいなのではないかな、と推測します。

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



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.101439への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.