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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0528
ばってん半透明ウィンドウに半透明じゃないを描画したい5解決


ばってん

リンク

2017/5/28(Sun) 11:23:23|NO.80016

半透明ウィンドウの背景のみ半透明化する方法はありますでしょうか。
(もう一つ透明なウィンドウを用意して重ねる?)



#include "user32.as" bgscr 0,300,200 GetWindowLong hwnd,-20 SetWindowLong hwnd,-20,stat|$80000 SetLayeredWindowAttributes hwnd,0x0,100,2 mes "半透明じゃない文字を描画したい…"



この記事に返信する


スペース

リンク

2017/5/28(Sun) 13:12:22|NO.80017

レイヤードウインドウとかどうでしょう。
https://goo.gl/2V0iEK



Cronus

リンク

2017/5/28(Sun) 13:35:02|NO.80018


#module #uselib "user32.dll" #func GetWindowLong "GetWindowLongA" int,int #func SetWindowLong "SetWindowLongA" int,int,int #func SetLayeredWindowAttributes "SetLayeredWindowAttributes" int,int,int,int #func SendMessage "SendMessageA" int,int,int,int #func PostMessage "PostMessageA" int,int,int,int #func SetWindowPos "SetWindowPos" int,int,int,int,int,int,int #define WM_LBUTTONDOWN 0x0201 #define WM_MOVING 0x0216 #define SWP_NOSIZE 0x0001 #define SWP_NOZORDER 0x0004 #define SWP_NOACTIVATE 0x0010 #define WM_NCLBUTTONDOWN $000000A1 #define HTCAPTION 2 //==================================================== // SetWindowFront //==================================================== // p1 … ウィンドウID //==================================================== // 説明 // ウィンドウを // 常に手前に表示することができます。 //==================================================== #deffunc SetWindowFront int prm1 wID = prm1 gsel wID, 2 return 0 //==================================================== // SetWindowMove //==================================================== // p1 … ウィンドウハンドル //==================================================== // 説明 // oncmd を利用して枠なしウィンドウ(bgscr)などを // 移動できるようにします。 //==================================================== #deffunc SetWindowMove int prm1 wHwnd = prm1 if wparam = 1 { sendmsg wHwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0 return 0 } return -1 //==================================================== // SetWindowNormal //==================================================== // p1 … ウィンドウID //==================================================== // 説明 // ウィンドウを通常状態に戻します //==================================================== #deffunc SetWindowNormal int prm1 wID = prm1 gsel wID, 0 return 0 //==================================================== // SetWindowTransparency //==================================================== // p1 … ウィンドウハンドル //==================================================== // 説明 // ウィンドウの透明度を操作します //==================================================== #deffunc SetWindowTransparency int prm1 wHwnd = prm1 GetWindowLong wHwnd, -20 SetWindowLong wHwnd, -20 , stat | 0x00080000 SetLayeredWindowAttributes wHwnd, 0xFF0000, 0, 1 return 0 #global strM = "ウィンドウ移動可能やで〜" bgscr 0, strlen(strM)*8, 41, 0, ginfo(20)/2-strlen(strM)*8/2, ginfo(21)/2-20/2 color 0, 0, 255 : boxf color 255, 0, 0 pos 1, 0 : mes strM objsize strlen(strM)*8, 20 pos 1, 20 : button "終了", *w_end SetWindowFront 0 SetWindowTransparency hwnd onclick gosub *wMove stop *wMove SetWindowMove hwnd //←を外すと枠なしウィンドウ(bgscr)の移動不可になる return *w_end end
いらない部分もあるけど参考にしてくれたら嬉しいっす^^



ばってん

リンク

2017/5/28(Sun) 15:34:00|NO.80020

>スペース様
返信ありがとうございます。

以下、リンク先のサンプルを参考にして書いてみたのですが、
アルファブレンドがいまいちのみ込めておらず、文字色が白の時は
くっきり見えますが、文字色を黒にすると文字も半透明になってしまいます。
出来れば文字色を黒にしてもくっきりさせたいです。


#include "module_lwm.hsp" //色情報ウィンドウ buffer 1,x,y color $FF,$FF,$FF:boxf //アルファ値情報ウィンドウ buffer 2,x,y color $50,$50,$F0:boxf color $FF,$FF,$FF mes "黒の文字を表示したい…" //レイヤードウィンドウにするウィンドウ bgscr 0,300,200 LayeredWindowAlpha 1,2


>Cronus様 
サンプルありがとうございます、色々勉強になります。
参考にさせて頂きたいのですが、半透明処理部は
SetLayeredWindowAttributes wHwnd, 0xFF0000, 0, 1
の第3、第4パラメータ依存(0〜255、2or3)
これだと、文字列も半透明になりませんでしょうか。

以下の過去ログはウィンドウを2つを(無理やり)重ねているみたいです。
良い手だと思うのですが、別の方法があれば…いいなと。
http://hsp.tv/play/pforum.php?mode=pastwch&num=42335



スペース

リンク

2017/5/28(Sun) 16:39:38|NO.80021

>>文字色を黒にすると文字も半透明になってしまいます。
アルファ値情報ウィンドウの色を変えていませんか?
このウインドウは飽くまでアルファ値を設定するためのものです。
白に近いほど不透明度(255で完全に表示)が上がります。
なので文字の色を変えたい場合は色情報ウインドウの色を変えてください。



ばってん

リンク

2017/5/28(Sun) 18:14:03|NO.80022

>スペース様
ご指摘通り色情報ウインドウの色を変えると
うまくいきました。ありがとうございました。


#include "module_lwm.hsp" //色情報ウィンドウ buffer 1,300,200 color $00,$00,$00:boxf //アルファ値情報ウィンドウ buffer 2,300,200 color $50,$50,$10:boxf color $FF,$FF,$FF mes "黒の文字を表示" //レイヤードウィンドウにするウィンドウ bgscr 0,300,200 LayeredWindowAlpha 1,2 onclick gosub *OnClickSub stop *OnClickSub if iparam=3{end} sendmsg hwnd,$a1,2,0 return



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