◀一般トップへ
  • 2691 GetSelectedString
    • 2692 RE: GetSelectedString
      • 2693 Re2: GetSelectedString
        • 2694 Re3: GetSelectedString
          • 2835 Re4: GetSelectedString
  • [2691] GetSelectedString おに 2003年02月02日 21:20

    選択範囲をタグで囲むマクロを作ろうとしてEditor.GetSelectedStringを使おうとしたのですが、複数行選択している時も、一行めしか取得できていない様子。
    二行目以降を得るにはどうすればよいのでしょうか。
    2002-12-24日版です。

    (ソースを見ても実質View->GetCurrentTextForSearch( cMem )だけですし引数も使って無くいまいち把握が…。VC++持って無いのでデバッガで追いかける事もできず。ソースを目で追う気力は無く…申し訳ないです)
    • [2692] RE: GetSelectedString すい 2003年02月02日 21:38

      >選択範囲をタグで囲むマクロを作ろうとしてEditor.GetSelectedStringを使おうとしたのですが、複数行選択している時も、一行めしか取得できていない様子。
      >二行目以降を得るにはどうすればよいのでしょうか。

      仕様が
      ------------------------------
      S_GetSelectedString /// string S_GetSelectedString ( i1 ) ;
      選択部分の文字列を取得

      i1:整数数値:<予約> 現在は特に機能はない。0 にしておくこと。

      「検索ダイアログを出した時に、検索の“条件”欄に取り込まれる文字列」
      と同じ文字列が取得される。従って次のような仕様になっている。
      ・文字列が範囲選択されている場合、その選択されている文字列が取得される。
      ・文字列が範囲選択されていない場合、カーソル位置の単語が取得される。
      ・複数行を選択してあっても、取得されるのは一番上の1行のみである。
      ・取得できる文字列は 259 バイトまでである。
      ------------------------------
      なので、2行目の取得は出来ません。字数制限(259バイト)まであります。
      現在、2行以上の取得方法はありません。

      S_Copy(0); // コピー
      S_Cut(0); // 切り取り
      とか使えば複数行をクリップボードに取得する事は出来ますけど、
      その後の加工処理の類は出来ませんし。
      外部にユーティリティ用意すればクリップボード経由で複数行を外部の
      ユーティリティで加工したりは出来ますけど、それじゃ何が違うような気もするし。(^^;
      • [2693] Re2: GetSelectedString おに 2003年02月02日 23:05

        すいさん、解説ありがとうございます。
        検索時の…そうでしたか…って、何故そんなきわどい仕様に。

        ええと、つまり、CWSH.cppの該当部分(S_GetSelectedString実装箇所)をCEditView::Command_COPYが選択文字列を得ている方法と同じに置き換えればいいのかな。
        (マクロからの場合は選択無しの時は空文字列が返って欲しいから…ええと…まあ、やってみます)
        • [2694] Re3: GetSelectedString げんた 2003年02月02日 23:58

          >検索時の…そうでしたか…って、何故そんなきわどい仕様に。
          本人です。理由は...既にあったちょうどいい関数がそういう仕様だったからです。
          ちゃんとした範囲指定を行えるようになるときのために一応未使用の引数をつけておきました。
          ごめんなさいね。
          • [2835] Re4: GetSelectedString MMX 2003年03月26日 15:18

            >選択範囲をタグで囲むマクロ
            ーーーーーーーーー TAG.PPA
            //キーボードマクロのファイル
            S_Cut(0); // 切り取り
            S_InsText( '<TAG></TAG>' );//適度に改行を入れる
            S_SearchPrev('</', 2); // 前を検索
            S_Left(0); // 選択解除のおまじない
            S_Paste(0); // 貼り付け
            // カーソル位置の調整はこのあと、履歴の管理とか
            -----------
            操作をマクロの変数で行わず
            編集面でするのが、エディタ・マクロの発想法です。
            ーーーーー 作った感想
            エディタ・マクロはどこでもクセが強い。
            特にDOとSetはあるがGetは少ない
            エディタ状態(情報)は
            カーソル位置(X,Y,ファイル先頭からのバイト位置)
            カーソル戻しとか