|
|
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
| |
|