- 作成者投稿
- 2016年6月25日 12:17 am #22854loop bridge参加者
お世話になります。
以前にhttps://jp.emeditor.com/forums/topic/%e4%bb%bb%e6%84%8f%e3%81%ae%e7%af%84%e5%9b%b2%e3%81%ae%e8%a1%8c%e3%82%92%e5%89%8a%e9%99%a4%e3%81%99%e3%82%8b%e3%83%9e%e3%82%af%e3%83%ad%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e7%9f%a5%e3%82%8a%e3%81%9f/
でお伺いした、 document.selection.SetActivePoint についてお伺いします。
最近気がついたのですが、どうも挙動がおかしい気がします。下記のコードを実行した際、期待している結果は、 5 行目の 05 から 10 行目の 10 が削除されることなのですが、
実際には、 5 行目の 05 までから 9 行目の 09 までしか削除されません。
コメントアウトしてある alert を有効にしてみたところ、 document.selection.Delete(); 直前の選択状態は 5 行目から 9 行目までとなっていました。また、 tmpST 、 tmpED の値をともに 1 にし、 1 行目だけが消えることを期待して実行したところ、
1 行目の 01 が 1 にになったのみでした。( 1 文字目(1行1列目)の 0 が消えた)私は何か書き間違い、思い違いをしていますでしょうか。
v16.0.2/Win7、8.1 ですが、少なくとも16.0からこの挙動になっていますし、16.1.0のbeta5でも同様でした。(テストコード)
tmpST = 5;
tmpED = 10;document.selection.SetActivePoint( eePosLogical, 1, tmpST);
document.selection.SetActivePoint( eePosLogical, 1, tmpED ,true );
//alert(tmpST + “–” + tmpED); //デバグ用
document.selection.Delete();(サンプルデータ)※実際のデータにはこのタイトルは含まない
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
202016年6月25日 2:04 am #22855Yutaka Emuraキーマスターloop bridge 様
いつもお世話になっております。江村です。
書いていただいたマクロを試してみましたが、これが正しい動作になります。
文字単位で選択しているため、選択の一番下の端が 1 桁目の場合、その 1 つ上の行までが選択されるようになります。
文字単位でなく、行単位の選択にした場合には、期待通りの結果になります。マクロで、document.selection.Mode = eeModeLine;
という行を 2 つの SetActivePoint の後に追加すると、行単位の選択になります。
よろしくお願い申し上げます。
2016年6月25日 1:15 pm #22856loop bridge参加者江村さま
ご回答有りがとうございます。
私の理解力が及ばずに申し訳ないのですが、上記リンクの#22396でいただいたものとは違うような気がするのですが、これも私の思い違いでしょうか。(document.selection.Mode = eeModeLine;の部分は前には教えていただけなかった)また、今回のアドバイスを元に
tmpST = 5;
tmpED = 10;document.selection.SetActivePoint( eePosLogical, 1, tmpST);
document.selection.Mode = eeModeLine;
document.selection.SetActivePoint( eePosLogical, 1, tmpED ,true );
document.selection.Mode = eeModeLine;
//alert(tmpST + “–” + tmpED); //デバグ用
document.selection.Delete();と修正、先のサンプルデータに対して実行を行ったところ、今度は5~11行めが削除されて、
01
02
03
04
12
13
14
15
16
17
18
19
20
となりました。
ふたつ目の document.selection.Mode = eeModeLine を外したところ、5~10行目の削除になりましたが、
ふたつ目は本当に必要なのでしょうか?2016年6月25日 2:59 pm #22857Yutaka Emuraキーマスターloop bridge 様
いつもお世話になっております。江村です。
以前は、document.selection.Mode = eeModeLine; が抜けていて申し訳ありませんでした。また、document.selection.Mode = eeModeLine; が無くても、1 つ上の行数を指定すればいいのです。
また、document.selection.Mode = eeModeLine; は、2番目の SetActivePoint の後に 1 回だけ書きます。
したがって、次のように書くか、
tmpST = 5; tmpED = 10; document.selection.SetActivePoint( eePosLogical, 1, tmpST); document.selection.SetActivePoint( eePosLogical, 1, tmpED ,true ); document.selection.Mode = eeModeLine; //alert(tmpST + "–" + tmpED); //デバグ用 document.selection.Delete();
あるいは、次のように書きます。
tmpST = 5; tmpED = 10; document.selection.SetActivePoint( eePosLogical, 1, tmpST); document.selection.SetActivePoint( eePosLogical, 1, tmpED + 1 ,true ); //alert(tmpST + "–" + tmpED); //デバグ用 document.selection.Delete();
よろしくお願い申し上げます。
2016年6月25日 4:34 pm #22858loop bridge参加者江村さま
たびたびのご回答ありがとうございます。
いろいろと混乱をしておりますが、document.selection.Mode = eeModeLine は 後ろ側の一つでよいと解釈し、実行をしたところ意図した結果を得ることができましたが、この認識であっていますでしょうか。また、 document.selection.Mode = eeModeLine を使わずに、 +1 で対応するやり方の場合ですが、tmpST=1 、 tmpED=20 と、最初から最後までを指定した場合に動きませんでした。5と10など、間の行を指定する場合には問題ありませんでした。
原因は私には理解出来ませんが、 document.selection.Mode = eeModeLine を記述する方法で今後は対応したいと思います。
ありがとうございました。
2016年6月27日 2:53 am #22861Yutaka Emuraキーマスターloop bridge 様
いつもお世話になっております。江村です。
文書の最終行の場合は、ご指摘のように、eeModeLine を使うか、桁数に行の長さを指定する必要が出てきます。
eeModeLine は、後ろ側の1つにするのが正しいです。
このあたりは説明が難しくて申し訳ありません。
よろしくお願い申し上げます。
- 作成者投稿
- このトピックに返信するにはログインしてください。