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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
1222
QWERTYWindows 10のOn/Off スイッチの作り方4解決


QWERTY

リンク

2020/12/22(Tue) 19:53:06|NO.91984

Windows 10のUWPアプリケーションにある、On/OffスイッチをWINAPIを使用して
HSP上で作ることはできますでしょうか?

イラスト的な感じだとこういった感じのスイッチです。
(===●) (●===)



この記事に返信する


TOMATO

リンク

2020/12/22(Tue) 23:21:29|NO.91987

試していませんが、

WinUIライブラリがXAML Islandsという機能を使用して、
Win32アプリから呼べるようになっているので、それを使えばできそうな気がする。
https://docs.microsoft.com/ja-jp/windows/apps/desktop/modernize/xaml-islands
https://docs.microsoft.com/ja-jp/windows/apps/desktop/modernize/using-the-xaml-hosting-api
https://github.com/microsoft/Xaml-Islands-Samples

ただし、描画方式や実装方法が従来と異なるので、HSPから呼び出すのは大変そう…。
少なくともコードだけでOn/Offスイッチの呼び出しはできないかと。
リボンコントロールと同じでXAMLが使われているので、ボタンなどの位置を記載したXMLファイルを用意し、
それをロードするという形になるでは思います。

なので、自前で描画したほうが簡単な気がします。



沢渡

リンク

2020/12/23(Wed) 17:16:54|NO.91992

スイッチの画像を自前で作るという方法で無理矢理やってみました。
なんちゃってトグルスイッチです。
参考:https://s-kita.hatenablog.com/entry/20120408/1333895565
https://grabacr1.rssing.com/chan-23253605/latest.php

#include "advapi32.as" #uselib "dwmapi.dll" #func DwmGetColorizationColor "DwmGetColorizationColor" int,int #define global circle2(%1,%2,%3,%4) circle %1,%2,(%1)+(%3),(%2)+(%4),1 //(%1,%2)の位置に%3×%4の円を描く #define global boxf2(%1,%2,%3,%4) boxf %1,%2,(%1)+(%3)-1,(%2)+(%4)-1 //(%1,%2)の位置に%3×%4の長方形を描く //テーマ(DARK/LIGHT)の取得 theme=1 //0の場合はダーク、1の場合はライト。取得に失敗した場合はライトにする。 hkey=0 RegOpenKeyEx 0x80000001,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize",0,1,varptr(hkey) //HKEY_CURRENT_USER=0x80000001 KEY_QUERY_VALUE=1 if stat=0 { data=0 : cbdata=4 RegQueryValueEx hkey,"AppsUseLightTheme",0,0,varptr(data),varptr(cbdata) if stat=0 { theme=(data!=0) } RegCloseKey hkey } back_c=theme*255 //背景の色 line_c=(theme=0)*255 //線の色 //アクセントカラーの取得 rgb=0x8888FF : blend=0 //取得に失敗した場合は「薄めの青」にする DwmGetColorizationColor varptr(rgb),varptr(blend) r=(rgb>>16)&0xFF : g=(rgb>>8)&0xFF : b=rgb&0xFF //スイッチ画像の作成 //最初は2倍サイズで作成し、その後縮小する d1=40 //スイッチの外周部の直径 l=4 //スイッチの縁の幅 d2=20 //スイッチの直線部分の長さ s=48 //スイッチの左右に動く部分の直径 buffer 2,d1+s,d1*2,0 : gsel 2 : color back_c,back_c,back_c : boxf //OFF状態 color line_c,line_c,line_c circle2 0,0,d1,d1 : boxf2 d1/2,0,s,d1 : circle2 s,0,d1,d1 d3=d1-l*2 : s2=d1+s-l*2-d3 : color back_c,back_c,back_c circle2 l,l,d3,d3 : boxf2 l+d3/2,l,s2,d3 : circle2 l+s2,l,d3,d3 x=(d1-d2)/2 color line_c,line_c,line_c circle2 x,x,d2,d2 //ON状態 color r,g,b circle2 0,d1,d1,d1 : boxf2 d1/2,d1,s,d1 : circle2 s,d1,d1,d1 color 255,255,255 circle2 d1+s-x-d2,d1+x,d2,d2 //縮小 w=(d1+s)/2 : h=d1/2 //スイッチの横幅と縦幅 buffer 1,w,h*2,0 : gsel 1 : pos 0,0 gzoom w,h*2,2,0,0,d1+s,d1*2,1 buffer 2,1,1,0 //不要になったバッファを消去 gsel 0 celdiv 1,w,h //メイン color back_c,back_c,back_c : boxf prm=0 //ON・OFF状態 x=100 : y=100 //スイッチの表示座標 gosub *draw_switch onclick gosub *click stop *click mx=mousex : my=mousey if (mx>=x)&(mx<x+w)&(my>=y)&(my<y+h) { prm=(prm=0) gosub *draw_switch } return *draw_switch //スイッチの描画 pos x,y celput 1,prm return



沢渡

リンク

2020/12/23(Wed) 20:02:59|NO.91994

すみません、NO.91992について追記です。

d2=20 //スイッチの直線部分の長さ s=48 //スイッチの左右に動く部分の直径
この部分はコメントが上下逆でした。お手数ですが読み替えていただけますようお願いします。



QWERTY

リンク

2020/12/27(Sun) 20:11:53|NO.92004

スクリプトの確認をしたところ、正常に動きました。
ありがとうございました。
今後も、参考にさせていただきます!



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