|
# 同期・非同期の誤記
ヘルプでは getconfigcolor が非同期といった感じになっていますが、
getcolormarker とかと同じで、「オブジェクト使用時」だけ非同期で
数値等を渡した時は、同期だと思います。
```
jsmode "WebView2\\" + currentmacrofilename;
js {
debuginfo(2);
hidemaru.setInterval(()=>{
getconfigcolor(0,1);
},0);
}
```
# getconfigcolorが微妙に使いにくいような?
## オブジェクト引数の方の問題
「getしたものをそのまま他へとsetするには良い設計」になっていそうですが、
単純に「で、その色なに?」というのが扱いにくいかと。
```
var curNormalColorJson = getconfigcolor({ "normal": "*" });
var bgColor = curNormalColorJson.normal.back;
```
といったように単純に背景色を得たとします。
この時、システムカラーを利用している(色変更してない)と
```syswindow```とか```syswindowtext```
とか出てくるわけですが、これだと、
**具体的なカラーが不明なので、Win32のGetSysColor とか .NET/C#で System.Drawing.SystemColors.Window
を取ってくる**
みたいな感じになっちゃいます。
ただし、カラーを設定する際に、具体的な色ではなく、syswindow や syswindowtext を指定する、
ということもあるんでしょうから
getconfigcolor({obj})が具体的な色を返せばいいということでもないのでしょう。
## 数値引数の方の問題
getconfigcolor(0, 1); など数値引数では、「具体的なカラー値」が返ってくるメリットがあります。
一方で、問題は、なんといってもまず「同期」であることです。
又、返ってくるのは、RGBではなく、BGRの順です。
(というか、```COLORREF型```というか```DWORD```というか、win32の色型というか)
これを#RRGGBBにするのも微妙にめんどくさいです。
## 実は sprintf が同期関数なのもこの使いにくい問題に関係している
WebView2の方は、padStart などがあるのでよいのですが、JScriptにはそれ系がない上に、
テンプレート文字列も無いため、非同期等で「sprintf」に頼りたくなる場面が非常に
多くなりがちであることがわかりました。
hidemaru.runProcessなどコマンドの整理時にも、JScriptだと、sprintfは使い勝手が良いです。
```
var nBGR = getconfigcolor(0, 1); // ここ同期
/// ビット演算などをして...
nRGB = シフト演算・ビット演算で BGR → RGB;
var sRGB = sprintf("#%06X", colorRGB); // しかしここが同期
```
本当はsprintfを使ってしまうと、独自文字列形成になってしまうため、padStartやtoString(16)を実装した方が... と
言いたいところですが、芋づる式に実装要件が増えますので、sprintf 一本を非同期にした方が良さそうかなっと。
```
// 白目になる実装だが、マクロレベルだと有りな気もするw
var nBGR = getconfigcolor(0,1);
var sBGR = sprintf("%06X", nBGR);
var sRGB = sBGR.replace(/^(..)(..)(..)$/, "#$3$2$1");
console.log(sRGB);
```
# まとめ的
非同期まで考えると、getconfigcolor が返す値が使いにくい
- ```getSysColor```に似たような関数を提供が必要なのだろううか?
- ```getconfigcolor``` を非同期にすれば、全部具体的なカラーで返ってくるが...
- runProcessの引数整えや、color文字列構築などを考えると、sprintf を非同期にした方が良さげ。
以上です〜
|
|