◀マクロトップへ
  • 404 折り返された論理行すべてを選択する
  • [404] 折り返された論理行すべてを選択する なすこじ 2007年10月08日 16:54

    何回も描き直しております (^^;

    >>dev:5096で出てきた「折り返された論理行すべてを選択する(改行含まず)」を作ってみました。
    思ったより長い……
    変な所があったら修正をお願いします m(_ _)m

    == ここから ==
    // SelectLogicalLine.ppa by nasukoji
    // カーソルのある論理行を最後の改行を除いて選択します。
    // PPA.DLL を SAKURA.EXE と同じディレクトリに置いてください。
    // マクロファイルの拡張子は.PPAとしてください。
    // 選択行が1000行を超える可能性がある場合はuntil行を変更してください。
    var
    yStart : integer;
    yEnd : integer;
    yNext : integer;
    yPrev : integer;
    count : integer;
    begin
    S_GoLineTop(9);
    S_BeginSelect();
    yStart := S_GetSelectLineFrom(); // レイアウト行取得
    S_CancelMode();

    yNext := yStart;
    count := 0;
    repeat
    // {
    count := count + 1; // 保険用のカウンタ(あまり意味は無い)
    yPrev := yNext;
    yNext := yNext + 1; // 次の行番号を作成
    S_Jump(yNext, 0); // レイアウト行にジャンプ
    S_BeginSelect();
    yEnd := S_GetSelectLineFrom(); // 行番号を取得
    S_CancelMode();

    if(yPrev = yEnd) then break; // 最終行(移動できなかった)

    S_GoLineTop(9); // 改行単位の行頭へ移動
    S_BeginSelect();
    yEnd := S_GetSelectLineFrom(); // 行番号を取得
    S_CancelMode();

    if(yStart < yEnd) then // 次の論理行となった
    begin
    yEnd := yEnd - 1; // 1行前までが選択範囲
    break;
    end
    // }
    until count > 1000; // ただの永久ループしない保険

    // 後ろに向かって選択する場合
    S_Jump(yStart, 0); // 選択開始行にジャンプ
    S_BeginSelect(); // 選択モード開始
    S_Jump(yEnd, 0); // 選択終了行にジャンプ
    S_GoLineEnd_Sel(); // 改行の前まで移動
    S_BeginSelect(); // 選択モード終了

    // 前に向かって選択する場合
    // S_Jump(yEnd, 0);
    // S_GoLineEnd();
    // S_BeginSelect();
    // S_Jump(yStart, 0);
    // S_GoLineTop(9);
    // S_BeginSelect();
    end;
    == ここまで ==