何回も描き直しております (^^;
>>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;
== ここまで ==