複数選択してカラーマーカーNo.10491
igus さん 24/12/11 15:05
 
複数選択して「検索」-「カラーマーカー」-「一時的なカラーマーカーを付ける」は
うまくいくのですが、マクロでcolormarkerを使ってやろうとするとうまくいきませ
ん。seltopxとか使って一応解決できたんですがちょっと冗長な感じがして、if(mult
iselecting)のところ無しで書けると嬉しいです。

//一時マーカー.mac

$a=getarg(0);
if($a=="1")#c=0x72F531;
if($a=="2")#c=0x29FF77;
if($a=="3")#c=0xFF82E6;

disabledraw;#x=x;#y=y;
if(multiselecting){
  #i=multiselectcount;#j=0;
  while(#j<#i){
    #tx[#j]=seltopx[#j];
    #ty[#j]=seltopy[#j];
    #ex[#j]=selendx[#j];
    #ey[#j]=selendy[#j];
    #j=#j+1;
  }
  escape;
  #j=0;
  while(#j<#i){
    moveto #tx[#j],#ty[#j];beginsel;
    moveto #ex[#j],#ey[#j];
    colormarker 0x000000, #c, 11, 1;
    escape;#j=#j+1;
  }
  moveto #x,#y;enabledraw;
  endmacro;
}
if(!selecting)selectline 1;
colormarker 0x000000, #c, 11, 0;
escape;moveto #x,#y;enabledraw;


[ ]
RE:10491 複数選択してカラーマーカーNo.10492
秀丸担当 さん 24/12/11 16:07
 
colormarker文は、通常では複数選択に対応していませんが、setcompatiblemodeを使
うことで複数選択対応として動作させることができます。
マクロの先頭に
setcompatiblemode 0x100000;
と書いておくといいです。

参考までの情報として、JavaScriptのマクロを使う場合は、getselectedrange()を使
って取得した複数の位置情報を使って、まとめてcolormarker()で色を付ける方法も
あります。

[ ]
RE:10492 複数選択してカラーマーカーNo.10493
こみやんま さん 24/12/11 16:47
 
>参考までの情報として、JavaScriptのマクロを使う場合は、getselectedrange()を
>使って取得した複数の位置情報を使って、まとめてcolormarker()で色を付ける方法
>もあります。

何回かこの掲示板でも出していますが、
jsmodeを使ってマーカーへと転写するなら下記みたいな例。


js {

// マーカー背景はデフォルトは黒だが、橋渡しの番号があれば、それに対応する色
function get_bkcolor() {
    var bgcolor_table =
    {
       "1" : "0x72F531",
       "2" : "0x29FF77",
       "3" : "0xFF82E6"
    };
   
    return bgcolor_table[getarg(0)] || "0x000000";
}

// 選択箇所をそのままマーカーへと変換
function set_custom_marker(bkcolor) {
    var range = getselectedrange();
    // 1つでも選択範囲がある
    if (range.items.length > 0) {
        var markers =
        {
            text: "#000000",
            back: bkcolor,
            style: "transparent",
            kind: "split",
            items: range.items // (複数・単数)選択されている[col,line]範囲配
列をそのまま参照
        }

        colormarker(markers);
    }
}

// 何も選択がなければ行選択
if (!selecting()) {
    selectline(1);
}

// そこぞから渡ってきた背景を使って、選択箇所にマーカーを付ける
set_custom_marker(get_bkcolor());


}

[ ]
RE:10493 複数選択してカラーマーカーNo.10494
igus さん 24/12/11 19:41
 
setcompatiblemode 0x100000;
JavaScript、どちらもうまく動作しました。
ありがとうございます。

[ ]
RE:10494 複数選択してカラーマーカーNo.10496
igus さん 24/12/12 07:36
 
//一時マーカー改定.mac

$a=getarg(0);
if($a=="1")$c="#72F531";
if($a=="2")$c="#29FF77";
if($c=="")$c="#FF82E6";

if(!selecting)selectline 1;

js{
  var c=hidemaru.getVar("$c");
  cm=getselectedrange();
  cm.back=c;
  colormarker(cm);
}
escape;
endmacro;

[ ]