[ 新規に投稿する ]

getconfigcolor の誤記と問題点No.10536
こみやんま さん 25/02/04 17:50 [ コメントを投稿する ]
  # 同期・非同期の誤記
ヘルプでは 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 を非同期にした方が良さげ。


以上です〜
[ ]
RE:10536 getconfigcolor の誤記と問題点No.10539
秀丸担当 さん 25/02/05 10:16 [ コメントを投稿する ]
  getconfigcolorなどの非同期としての振る舞いは、getcolormarkerなどのオブジェクト指定時と同様でした。
getconfigcolorのオブジェクト指定は、設定をそのまま扱えるためですが、具体的な色として取得できたらいいかもしれません。
sprintfも現状では同期でした。
それぞれご意見参考にさせていただきます。
[ ]

[ 新規に投稿する ]