「選択範囲が変更されたとき」のイベントマクロが正常に機能しない (@Mery ver 3.2.5)

  1. お世話になっています。
    以下にあげるような操作をしたさいに、マクロ用のイベント「選択範囲が変更されたとき」が発生しないようで、【テストコード】のようなシンプルなイベントマクロでも正常に機能しませんでした (ステータスが更新されなかったり、アラートが表示されなかったり)。
    ご確認いただきますようお願いします。

    1.重複行の行番号を順々に Ctrl+クリック して選択範囲に追加していったとき。
    ※「選択範囲を元に戻す/やり直し」でもイベントが起きたり起きなかったり…

    2.ショートカットキーや editor.ExecuteCommandByID() で以下のコマンドを "連続で実行" したとき (とくに連打の3回目以降からイベントを取りこぼすことが多いようでした)。
    ・「次/前を検索」
    ・「次/前の文字列を検索」
    ・「選択範囲に次の候補を追加」
    ・「スキップして次の候補を追加」

    3.「選択範囲を行に分ける」を実行したとき。
    ※ また、さいごにつくった選択範囲のキャレット位置(終了側・アクティブ位置)が先頭側だった場合、「選択範囲を行に分ける」の実行後にキャレットがひとつ余分に表示されます。

    -----
    Mery ver 3.2.5 (32bit) ポータブル
    Windows XP sp3 (32bit)
    【テストコード】

    // 「選択範囲が変更されたとき」のイベントマクロとして
    var s = editor.ActiveDocument.selection;
    Status = s.Text.length + " 文字選択 ・ "
           + s.GetTopPointY( mePosLogical ) + " 行目";
    
    // または
    // Alert( s.Text.length + " 文字選択 ・ "
    //      + s.GetTopPointY( mePosLogical ) + " 行目" );

    ※ また、テストコードを書くさいに、さいごにつくった選択範囲の 開始/終了 位置を取得して文字数の増分 Math.abs( s.GetAnchorPos() - s.GetActivePos() ) もステータス表示させようとおもっていたのですが、つねに「増分=0」扱いになりました。
    複数選択の状態からだと引数なしの GetAnchorPos() を実行したときの戻り値が、引数なしの GetActivePos() の値とおなじになってしまうようで、「さいごにつくった選択範囲の "開始側" の位置」を取得できないようでした。
    あわせてご確認いただきますよう、よろしくお願いします。

     |  sukemaru  |  返信
  2. ご報告ありがとうございます。
    ご意見は今後の開発の参考にさせていただきたいと思います。

    > 複数選択の状態からだと引数なしの GetAnchorPos()

    引数なしの GetActivePos、GetAnchorPos は複数選択には対応していません。複数選択の場合は引数を指定してご利用ください。

    複数選択の場合の GetActivePos、GetAnchorPos は便宜上、システムキャレットの位置が返りますが不具合ではありません。

    複数選択の仕様上、複数選択の場合、通常選択 (システムキャレット) は "選択範囲ゼロ" として複数あるキャレット (これらはすべてダミーのキャレット) のうちのどれか一つに溶け込ませているためです。最後に追加したキャレットになるとは限りません。ご了承ください。

     |  Kuro  |  返信
  3. ご返信ありがとうございます。

    > ご報告ありがとうございます。
    > ご意見は今後の開発の参考にさせていただきたいと思います。

    よろしくお願いします。

    > 引数なしの GetActivePos、GetAnchorPos は複数選択には対応していません。複数選択の場合は引数を指定してご利用ください。

    > 複数選択の仕様上、複数選択の場合、通常選択 (システムキャレット) は "選択範囲ゼロ" として複数あるキャレット (これらはすべてダミーのキャレット) のうちのどれか一つに溶け込ませているためです。

    諒解いたしました。
    コーディングの工夫で対処できるようがんばってみます。

     |  sukemaru  |  返信
  4. >>sukemaru
    > 複数選択の状態からだと引数なしの GetAnchorPos()

    引数無しで動作するわけがないだろうというのが私の第一感です
    マルチカーソル実装時の記事でメソッドについて紹介されていますし、フォーラムの関連スレでも開設されています。有志の方々のサンプロコードもあります。これらをよく読みましょう

    というか、それらのスレにはsukemaruの名前もちらほら見かけます
    sukemaruという人は複数人いるんでしょうか?
    sukemaruはマルチカーソルのマクロを投稿していますよね?中身は見てませんが、こんな勘違いをしていてマクロが作れるんでしょうか?
    わかった上ですっとぼけているのだと思います。非常に不快です

    > コーディングの工夫で対処できるようがんばってみます

    対処などという言い方は、まるで問題があるかのようで、失礼だと思います。

     |  井上  |  返信
スポンサーリンク