◀マクロトップへ
  • 391 カーソル桁位置を知るには?
    • 392 RE: カーソル桁位置を知るには?
      • 393 Re2: カーソル桁位置を知るには?
  • [391] カーソル桁位置を知るには? だだ星人 2007年09月02日 22:57

     はじめまして。だだ星人と申します。

    表題の件ですが、マクロ中で現在のキャレット(カーソル)位置
    を知るにはどうしたらよいのか?わからないので投稿させていた
    だきます。

     ExpandParameter( '$x' )を使用すればキャレット物理桁位置
    が取得できることはわかりました。しかし、以下のような文面で
    は私が期待した内容のものが取得できないのです。

    例)TABサイズ = 4:TAB = '^'
    ^ ^ i = 1;

    上記行のセミコロンの後ろにキャレットがある場合、私としては
    "15"が帰ってきてほしいのですが(※1)、
    ExpandParameter( '$x' )だと"9"が帰ってきます。
    要は、TABサイズが考慮されていないので、TABサイズを考慮した、
    エディタのルーラーに表示されている位置が取得したいのです。

     どうやったらこの位置が取得できますでしょうか?ご存じの方
    がいらっしゃいましたら、是非ご教示ください。

     みなさま、よろしくお願いいたします。

    ※1)"15"は1起算の場合。ゼロ起算の場合は"14"が帰ってきてほ
    しい。
    • [392] RE: カーソル桁位置を知るには? すい 2007年09月03日 01:03

      S_ExpandParameter('$x'); は「現在の物理桁位置(先頭からのバイト数 1開始)」ですからね。
      バイト数だからタブ文字があると桁位置とは剥離します。

      で、現状、タブ幅も考慮した桁位置取得機能はありません。

      ただ、選択状態をいじっても良いなら「選択開始桁の取得」でできます。

      -----
      // 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
      // マクロファイルの拡張子は .PPA でなくてはなりません。

      var // 変数確保
      x,y:Integer; // 整数数値変数 x,y 確保
      begin //{

      S_CancelMode(0); // 各種モードの取り消し - 選択解除
      // ↑マクロ開始時に選択状態だった場合のため

      S_BeginSelect(0); // 範囲選択開始
      x := S_GetSelectColmFrom(); // 選択開始桁の取得
      y := S_GetSelectLineFrom(); // 選択開始行の取得
      S_CancelMode(0); // 各種モードの取り消し - 選択解除

      MessageBox( IntToStr(x) + ',' + IntToStr(y) , '(x,y)' , 0 ); // 表示

      end; //}
      -----
      • [393] Re2: カーソル桁位置を知るには? だだ星人 2007年09月03日 11:36

        すいさん さん こんにちは

        ご回答ありがとうございます。
        そんな方法があったとは!思いつきませんでした。本当に、ありがとうございます。

         それにしてもサクラエディタのマクロって、エディタ上でできるほとんど全ての操作が行える点はスゴイ!と思うんですが、
        現在のエディタ内情報の状態取得が弱いですね。ExpandParameter('$x')にしても「何故文字列で取得?数値は?」と思ったりします。
         なんらかの開発ポリシーがあるんでしょうか?