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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
1122
ゆっくりXPWindows 11のMicaを表示させるには?8解決


ゆっくりXP

リンク

2023/11/22(Wed) 08:45:55|NO.100648

HSP3でMicaを表示することってできないですかね?
DwmSetWindowAttributeのDWMWA_MICA_EFFECTを呼び出せば、Micaを適用できることを知り、ググって調べてみたのですが日本語の情報がどこにも載っていません。
どうやったらMicaのUIを表示させることはできますか?

https://tvc-16.science/mica-wpf.html



この記事に返信する


ゆっくりXP

リンク

2023/11/22(Wed) 18:36:53|NO.100656

試行錯誤してたら、タイトルバーの色を変えられる方法を知ったのですが、Micaを適用する方法を知らない…。

#uselib "dwmapi.dll" //#func global DwmGetWindowAttribute "DwmGetWindowAttribute" int, int, int, int #func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int #define DWMWA_USE_HOSTBACKDROPBRUSH 17 #define DWMWA_USE_IMMERSIVE_DARK_MODE 20 #define DWMWA_WINDOW_CORNER_PREFERENCE 33 #define DWMWA_BORDER_COLOR 34 #define DWMWA_CAPTION_COLOR 35 #define DWMWA_TEXT_COLOR 36 #define DWMWA_VISIBLE_FRAME_BORDER_THICKNESS 37 #define DWMWCP_DEFAULT 0 #define DWMWCP_DONOTROUND 1 #define DWMWCP_ROUND 2 #define DWMWCP_ROUNDSMALL 3 #define DWMWA_SYSTEMBACKDROP_TYPE 38 #define DWMWA_MICA_EFFECT 1029 #define ctype RGB(%1,%2,%3) (($FF & %1)|(($FF & %2) << 8)|(($FF & %3)<<16)) //タイトルバーの色を変更 opt = RGB(80,25,0) DwmSetWindowAttribute hwnd,DWMWA_CAPTION_COLOR,varptr(opt),4



沢渡

リンク

2023/11/23(Thu) 22:48:04|NO.100665

色々調べて試行錯誤して、なんとかマイカらしきものは実現できたようですが、
このやり方だと以下のような制限があるようで。

・DwmExtendFrameIntoClientAreaを利用してフレーム部分を拡張させることで、
 その拡張された部分にマイカの効果が適用される。
・ただし、DWMWA_USE_IMMERSIVE_DARK_MODEを使用してダークモードにしないと、
 マイカが適用された部分への描画はほとんど反映されず、
 実用的ではない。
・マイカ適用範囲においては、色が黒に近い部分ほどマイカの効果は強くなり、
 明るい色になるほどマイカの効果は薄れていく。

私のやり方だと、リンク先のサンプルのように「自由自在」とはいかないようです。

#uselib "dwmapi.dll" #func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int #func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int #define DWMWA_USE_HOSTBACKDROPBRUSH 17 #define DWMWA_USE_IMMERSIVE_DARK_MODE 20 #define DWMWA_SYSTEMBACKDROP_TYPE 38 opt=1 DwmSetWindowAttribute hwnd,DWMWA_USE_IMMERSIVE_DARK_MODE,varptr(opt),4 //このやり方だと実質ダークモード専用につき dim margins,4 margins=-1,0,0,0 //左、右、上、下のマージンを指定。 //1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。 DwmExtendFrameIntoClientArea hwnd,varptr(margins) color 0,0,0 : boxf pos 0,0 : color 255,255,255 : mes "ABCDEF" opt = 4 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。 DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4 stop



沢渡

リンク

2023/11/23(Thu) 22:50:16|NO.100666

妥協案として、ウィンドウの周辺の部分にだけマイカを適用し、
そこを避けるようにして描画するという手もあるのかな、と。

#include "user32.as" #uselib "dwmapi.dll" #func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int #func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int #define DWMWA_USE_HOSTBACKDROPBRUSH 17 #define DWMWA_USE_IMMERSIVE_DARK_MODE 20 #define DWMWA_SYSTEMBACKDROP_TYPE 38 dim margins,4 margins=20,20,40,40 //左、右、上、下のマージンを指定。 //1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。 DwmExtendFrameIntoClientArea hwnd,varptr(margins) color 30,30,30 : boxf opt = 4 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。 DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4 hwnd0=hwnd bgscr 1,600,400 : gsel 1 SetParent hwnd,hwnd0 : width ,,20,40 mes "あいうえお" stop



ゆっくりXP

リンク

2023/11/24(Fri) 17:21:27|NO.100671

そんな方法があったとは…。
DwmExtendFrameIntoClientAreaはWindows 7で使っていたのですが、応用すればこういうこともできるんですね…。

↓ちなみにこのスクリプトと併用することは可能でしょうか?
https://waiei.blog.fc2.com/blog-entry-627.html

DWMWA_BORDER_COLORでタイトルバーの色を変更できるの知ったのですが、マイカとアクリルを反映させる方法ってないんですかね…。

#uselib "dwmapi.dll" #func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int #func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int #define DWMWA_USE_HOSTBACKDROPBRUSH 17 #define DWMWA_USE_IMMERSIVE_DARK_MODE 20 #define DWMWA_SYSTEMBACKDROP_TYPE 38 #define DWMWA_BORDER_COLOR 34 #define DWMWA_CAPTION_COLOR 35 #define ctype RGB(%1,%2,%3) (($FF & %1)|(($FF & %2) << 8)|(($FF & %3)<<16)) //タイトルバーの色を変更 opt = RGB(80,25,0) DwmSetWindowAttribute hwnd,DWMWA_CAPTION_COLOR,varptr(opt),4 dim margins,4 margins=-1,0,0,0 //左、右、上、下のマージンを指定。 //1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。 DwmExtendFrameIntoClientArea hwnd,varptr(margins) color 0,0,0 : boxf pos 0,0 : color 255,255,255 : mes "ABCDEF" opt = 2 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。 DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4 stop



沢渡

リンク

2023/11/24(Fri) 18:31:52|NO.100672

たしかリンク先の方法はWindows7(と、Vista?)でしか
使えない方法だったと記憶しています。
(実際私が試してみても何も起きませんでした)
Windows11では過去にこういう方法↓でアクリル表示ができたのですが、
今では使えなくなってしまったようです。
https://hsp.tv/play/pforum.php?mode=pastwch&num=90762

>DWMWA_BORDER_COLORでタイトルバーの色を変更できるの知ったのですが、マイカとアクリルを反映させる方法ってないんですかね…。
私の勘違いでなければ、NO.100671のスクリプトで、タイトルバーの色が変わった上で
タイトルバー以外の部分にマイカが反映されているように思いますが。
(DWMWA_USE_IMMERSIVE_DARK_MODEでダークモードにした場合も同様)
壁紙はOS付属の派手な色の壁紙にして検証しています。



ゆっくりXP

リンク

2023/11/24(Fri) 19:22:19|NO.100673

>たしかリンク先の方法はWindows7(と、Vista?)でしか使えない方法だったと記憶しています。
↓このスクリプトを少し改造して、DWMWA_SYSTEMBACKDROP_TYPEを与えてみたら反映されてました。
https://twitter.com/Yukkuri_XP/status/1727995724837822626

UWP以外でモダンUIを有効にする方法として、DWMWA_USE_HOSTBACKDROPBRUSHというのを見つけたのですが、具体的にはどのように使用すればいいのでしょうか?
https://learn.microsoft.com/ja-jp/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute



沢渡

リンク

2023/11/24(Fri) 22:09:45|NO.100674

>↓このスクリプトを少し改造して、DWMWA_SYSTEMBACKDROP_TYPEを与えてみたら反映されてました。
申し訳ありません、その通りやってみたら上手くできました。
下の方のコードしか試しておらず、早合点しました。すみませんでした。

>UWP以外でモダンUIを有効にする方法として、DWMWA_USE_HOSTBACKDROPBRUSHというのを見つけたのですが、具体的にはどのように使用すればいいのでしょうか?
その文書や、文書からのリンク先も読みましたが、申し訳ありませんが、
HSPでどう扱えばいいのかは見当もつきません。(何かしらのDLLに登録されている関数を呼び出すだけで済む話ではない模様?)
DWMWA_USE_HOSTBACKDROPBRUSHでググっても情報は無いに等しかったので……。

ダークとかライトだけでなく、ウィンドウ全体を自分の任意の色にしたい、ということであるなら、
ちょっと力技ですが、以下のようにbgscrでタイトルバーの無いウィンドウを作るという形は
どうでしょうか?

#uselib "dwmapi.dll" #func global DwmSetWindowAttribute "DwmSetWindowAttribute" int, int, int, int #func global DwmExtendFrameIntoClientArea "DwmExtendFrameIntoClientArea" int,int #define DWMWA_USE_IMMERSIVE_DARK_MODE 20 #define DWMWA_SYSTEMBACKDROP_TYPE 38 bgscr 0,640,480 opt=1 DwmSetWindowAttribute hwnd,DWMWA_USE_IMMERSIVE_DARK_MODE,varptr(opt),4 //このやり方だと実質ダークモード専用につき dim margins,4 margins=-1,0,0,0 //左、右、上、下のマージンを指定。 //1番目の要素に-1を指定すればウィンドウ全体にマイカを適用可能。 DwmExtendFrameIntoClientArea hwnd,varptr(margins) opt = 2 //2はマイカ、3はアクリル、4はマイカAlt。0や1だとマージンの指定範囲によってはかなり珍妙な表示になってしまう。 DwmSetWindowAttribute hwnd,DWMWA_SYSTEMBACKDROP_TYPE,varptr(opt),4 objsize 30,30 : pos ginfo_winx-30,0 : button goto "X",*exit color 0x10,0,0 : boxf //マイカを反映させるため、背景の色はできるだけ暗い色にする pos 0,0 : color 255,255,255 : mes "ABCDEF" onclick gosub *click d_flag=0 x_off=0 : y_off=0 repeat if d_flag { getkey key,1 if key { width ,,ginfo_mx-x_off,ginfo_my-y_off } else { d_flag=0 } } await 33 loop *click if iparam : return //左クリック以外は戻る d_flag=1 x_off=ginfo_mx-ginfo_wx1 y_off=ginfo_my-ginfo_wy1 return *exit end



ゆっくりXP

リンク

2023/11/29(Wed) 08:37:49|NO.100689

返信が遅くなりましたが、ボタンやチェックボックスなどモダンUIにすることってできない感じですかね?
bgscrで枠なしウィンドウを使う方法しかなかったんですね…。
とりあえず、解決にしておきます。



記事削除

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

NO.100648への返信

マスコット

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

名前

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

削除用パスワード

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

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

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