colormarkerのレイヤーを知る方法No.08730
たけとり さん 18/08/19 18:59
 
お世話になります。

 表記の通りなのですが、カーソル位置のレイヤー名を知る方法はありますでしょう
か?

 getcolormarkerは、ユーザデータをとれますがレイヤー名はとれないようですし、
colorcodeは0x00080000でマーカーかどうかはわかりますが、レイヤー名までわから
ないようですし…。
 enumcolormarkerlayerとnextcolormarkerなどでカーソルが動くか…みたいなので
調べてもいいのですが、もっとうまい方法があるといいなと思いまして、質問しまし
た。

 なお、カーソル位置じゃなくても、特定の座標の〜でも結構です。

 よろしくお願いします。


[ ]
RE:08730 colormarkerのレイヤーを知る方No.08732
秀丸担当 さん 18/08/20 12:53
 

getcolormarkerは、もともと名前の付いたレイヤー名は明示的に指定しない限りは取
得はできないようになっていました。
例えばgetcolormarker(0x01|0x02)としても、名前が無い一時的なカラーマーカーの
情報しか取得できないです。
第2パラメータにレイヤー名を指定して取得すると、どれがあるのかがわかります。
重複している場合もあるので、片っ端から調べることで、重複も知ることができます。
例:
message getcolormarker(0x01|0x02);
message getcolormarker(0x01|0x02,"mylayer1");
message getcolormarker(0x01|0x02,"mylayer2");

こういうことをしなくても実際使われているレイヤーの情報と、レイヤー名が取得で
きるようにできたらいいです。
今後のバージョンで0x0100のフラグを追加して、例えば、getcolormarker(0x01|0x02
|0x0100)としたら「0000000000FFFFFF"mylayer1"」という情報が得られるようにしよ
うと思います。
ただし、この場合は重複を知ることはできないことになります。

[ ]
RE:08732 colormarkerのレイヤーを知る方No.08739
たけとり さん 18/08/20 20:39
 
>message getcolormarker(0x01|0x02);
>message getcolormarker(0x01|0x02,"mylayer1");
>message getcolormarker(0x01|0x02,"mylayer2");

 なるほど。正しいレイヤー名を指定すると""じゃない値が返される訳ですね。
 個人的には、この方法があるとわかっただけで満足です。
(レイヤー数も限られているため、総当たりでも最大32回試せばいいですし。)

>今後のバージョンで0x0100のフラグを追加して、例えば、getcolormarker(0x01|0x0
>2|0x0100)としたら「0000000000FFFFFF"mylayer1"」という情報が得られるようにし
>ようと思います。
>ただし、この場合は重複を知ることはできないことになります。

 わがままを言わせていただくと、カーソル位置の すべて のレイヤー名を知りたい
のが元々の動機でして、
例えば、
enumcolormarkerlayerで、第2引数を(新設していただき、それを)設定したら、
「カーソル位置のレイヤーだけを列挙する」
といった、カーソル位置にかぶっているレイヤー名を列挙できる仕組みがあるとうれ
しいです。

  message sprintf("カーソル位置の、1番目のレイヤー名は%sです。", enumcolorma
rkerlayer(0, 1));

みたいな感じです。

 いずれにしても、前述の方法を教えていただきありがとうございます。

[ ]
RE:08739 colormarkerのレイヤーを知る方No.08752
たけとり さん 18/08/21 21:44
 
>>今後のバージョンで0x0100のフラグを追加して、例えば、getcolormarker(0x01|0x
>02|0x0100)としたら「0000000000FFFFFF"mylayer1"」という情報が得られるように
>しようと思います。

 Ver. 8.85 beta1でレイヤー名が帰ってくることを確認しました。

 対応、ありがとうございました。

[ ]