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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
1008
かゆぽん。ウィンドウの背景だけ半透明6解決


かゆぽん。

リンク

2016/10/8(Sat) 18:16:56|NO.77066

ウィンドウを半透明にするソースがあるのですが、これだと、文字や別のオブジェクトまで半透明になってしまいます
背景だけ半透明にする方法があったら教えてください。

http://lhsp.s206.xrea.com/hsp_window.html#6



この記事に返信する


jsAster(タブレット)

リンク

2016/10/8(Sat) 20:31:20|NO.77067

色指定でggってください



沢渡

リンク

2016/10/9(Sun) 12:28:40|NO.77070

リンク先のサンプルで言いますと、初めの方で

col=0x00000000 color 0,0,0 boxf
などとしたあと、下の方にある

SetLayeredWindowAttributes hwnd, 0, 255 * stat / 100, ULW_ALPHA


SetLayeredWindowAttributes hwnd, col, 255 * stat / 100, ULW_COLORKEY
とすると、指定した色だけを透過することはできました。
しかしこれだと、「指定した色の透明度を設定する」ということはできません。
(いくらstatが変化しても常に完全透過になる)

どうやらこのサイト↓によると、「指定した色の透明度を設定する」ということをするには、
「半透明のウィンドウと指定色透明のウィンドウをふたつ作成し、常に連動して動くようにする」
という処理をしなければいけないようです。
http://d.hatena.ne.jp/satosystems/20100108/1262947730



かゆぽん。

リンク

2016/10/9(Sun) 19:40:13|NO.77073

返信ありがとうございました。参考にさせていただきます。



沢渡

リンク

2016/10/9(Sun) 22:04:53|NO.77075

というわけで、作ってみました。

//Kpan氏の「ウィンドウの半透明化」スクリプトを改造 //http://lhsp.s206.xrea.com/hsp_window.html#6 //要 Windows 2000以降 #include "user32.as" #define WS_EX_LAYERED $80000 #define WS_EX_TOOLWINDOW $80 #define LWA_COLORKEY 1 #define ULW_ALPHA 2 ; 簡易的なOSチェック if varptr(SetLayeredWindowAttributes) = 0 { dialog "Windows 2000/XP/Vista じゃないっぽい。。。" end } bgscr 1,640,480,0 : gsel 1 //後ろ側のウィンドウ hwnd1=hwnd ; 拡張ウィンドウスタイルにWS_EX_LAYEREDとWS_EX_TOOLWINDOWを追加適用 ; WS_EX_TOOLWINDOWは後ろのウィンドウをタスクバーに表示しないためのもの GetWindowLong hwnd1, -20 SetWindowLong hwnd1, -20, stat | WS_EX_LAYERED+WS_EX_TOOLWINDOW ; 後ろのウィンドウがアクティブになった場合のウィンドウメッセージ oncmd gosub *win0_act,$0006 screen 0,640,480,0 : gsel 0 //前側のウィンドウ hwnd0=hwnd x_off=(ginfo_sizex-ginfo_winx)/2 //x方向のオフセット(ウィンドウの枠の幅) y_off=(ginfo_sizey-ginfo_winy)-x_off //y方向のオフセット(ウィンドウの枠の幅+タイトル部分の幅) ; 拡張ウィンドウスタイルにWS_EX_LAYEREDを追加適用 GetWindowLong hwnd0, -20 SetWindowLong hwnd0, -20, stat | WS_EX_LAYERED col=0x00000000 color 0,0,0 boxf pos 0,0 color 255,0,0 mes "この文字は透過しないよ" SetLayeredWindowAttributes hwnd0, col, 255 * stat / 100, LWA_COLORKEY //このウィンドウを透過 gosub *win1_move ; トラックバー用ウィンドウメッセージ oncmd gosub *vscroll, $114 ; 前のウィンドウが移動した時のウィンドウメッセージ oncmd gosub *win1_move,$0003 ; 透明度調節用のトラックバー pos 200, 200 winobj "msctls_trackbar32", "", , $50000000 | $100, 200, 30 hTrackbar = objinfo(stat, 2) ; TBM_SETPOS sendmsg hTrackbar, $405, 1, 100 flag=0 stop ; EM_VSCROLL *vscroll if lparam = hTrackbar { ; TBM_GETPOS sendmsg hTrackbar, $400 ; 第3パラに透明度 (アルファ値の範囲 0〜255) SetLayeredWindowAttributes hwnd1, 0, 255 * stat / 100, ULW_ALPHA return } return *win1_move //前のウィンドウに合わせて後ろのウィンドウを移動させる gsel 0 wx=ginfo_wx1 : wy=ginfo_wy1 gsel 1 width ,,wx+x_off,wy+y_off gsel 0 return *win0_act //後ろのウィンドウがアクティブになったとき、強制的に前のウィンドウをアクティブに if ((wparam&0xFFFF)!=0) { gsel 0,1 } return
参考にしたサイトはこのあたり。
http://chokuto.ifdef.jp/urawaza/message/
http://chokuto.ifdef.jp/advanced/prm/extended_window_style.html



沢渡

リンク

2016/10/9(Sun) 23:09:58|NO.77077

んー、「最小化した時に後ろのウィンドウが表示されたままになる」という問題に対処しましたが、
最小化から復帰したあと、ウィンドウの移動も右上の×で閉じるのもできなくなりますね……。(汗
私のスキルではここからはわかりません。申し訳ない……。

//Kpan氏の「ウィンドウの半透明化」スクリプトを改造 //http://lhsp.s206.xrea.com/hsp_window.html#6 //要 Windows 2000以降 #include "user32.as" #define WS_EX_LAYERED $80000 #define WS_EX_TOOLWINDOW $80 #define LWA_COLORKEY 1 #define ULW_ALPHA 2 ; 簡易的なOSチェック if varptr(SetLayeredWindowAttributes) = 0 { dialog "Windows 2000/XP/Vista じゃないっぽい。。。" end } bgscr 1,640,480,0 : gsel 1 //後ろ側のウィンドウ hwnd1=hwnd ; 拡張ウィンドウスタイルにWS_EX_LAYEREDとWS_EX_TOOLWINDOWを追加適用 ; WS_EX_TOOLWINDOWは後ろのウィンドウをタスクバーに表示しないためのもの GetWindowLong hwnd1, -20 SetWindowLong hwnd1, -20, stat | WS_EX_LAYERED+WS_EX_TOOLWINDOW ; 後ろのウィンドウがアクティブになった場合のウィンドウメッセージ oncmd gosub *win0_act,$0006 screen 0,640,480,0 : gsel 0 //前側のウィンドウ hwnd0=hwnd x_off=(ginfo_sizex-ginfo_winx)/2 //x方向のオフセット(ウィンドウの枠の幅) y_off=(ginfo_sizey-ginfo_winy)-x_off //y方向のオフセット(ウィンドウの枠の幅+タイトル部分の幅) ; 拡張ウィンドウスタイルにWS_EX_LAYEREDを追加適用 GetWindowLong hwnd0, -20 SetWindowLong hwnd0, -20, stat | WS_EX_LAYERED col=0x00000000 color 0,0,0 boxf pos 0,0 color 255,0,0 mes "この文字は透過しないよ" SetLayeredWindowAttributes hwnd0, col, 0, LWA_COLORKEY //このウィンドウを透過 gosub *win1_move ; トラックバー用ウィンドウメッセージ oncmd gosub *vscroll, $114 ; 前のウィンドウが移動した時のウィンドウメッセージ oncmd gosub *win1_move,$0003 ; 前のウィンドウが最小化or復帰した場合のウィンドウメッセージ oncmd gosub *win0_act2,$0005 ; 透明度調節用のトラックバー pos 200, 200 winobj "msctls_trackbar32", "", , $50000000 | $100, 200, 30 hTrackbar = objinfo(stat, 2) ; TBM_SETPOS sendmsg hTrackbar, $405, 1, 100 stop ; EM_VSCROLL *vscroll if lparam = hTrackbar { ; TBM_GETPOS sendmsg hTrackbar, $400 ; 第3パラに透明度 (アルファ値の範囲 0〜255) SetLayeredWindowAttributes hwnd1, 0, 255 * stat / 100, ULW_ALPHA return } return *win1_move //前のウィンドウに合わせて後ろのウィンドウを移動させる gsel 0 wx=ginfo_wx1 : wy=ginfo_wy1 gsel 1 width ,,wx+x_off,wy+y_off gsel 0 return *win0_act //後ろのウィンドウがアクティブになったとき、強制的に前のウィンドウをアクティブに if ((wparam&0xFFFF)!=0) { gsel 0,1 } return *win0_act2 if (wparam=1) { //後ろのウィンドウを非表示に gsel 1,-1 return } if (wparam=0) { //後ろのウィンドウを再表示 gsel 1,1 } return



かゆぽん。

リンク

2016/10/10(Mon) 23:29:50|NO.77093

す、すごい
すごい所申し訳ないのですが
http://hsp.tv/play/pforum.php?mode=pastwch&num=48918
こんなものを見つけてしまいました
ちゃんと調べてから質問すべきでした

回答して下さった方ありがとうございました



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