■ --- つづき ---
// 編集を無かったことにする
S_Undo(); // 文字列出力をアンドゥ
if cNum2 > 0 then S_Undo(); // 文字列出力をアンドゥ
S_Undo(); // 改行をアンドゥ
S_Undo(); // 改行をアンドゥ
S_Undo(); // 改行をアンドゥ
// 指定桁数より行が短い場合、行末へカーソルを移動して終了する
S_GoLineEnd();
if xPos > StrToInt( S_ExpandParameter( '$x' ) ) then Exit;
// 選択範囲が無い場合、行頭へカーソルを移動して終了する
S_GoLineTop(1);
if xPos2 = 1 then Exit;
// 文字列を検索する
while lineP = StrToInt( S_ExpandParameter( '$y' ) ) do
begin
S_SearchNext( searchStr, 18 ); // 文字列を検索
S_Right();
S_BeginSelect();
xPos := S_GetSelectColmFrom(); // 桁位置(レイアウト行)を取得する
S_CancelMode();
// 指定位置、または次の検索では指定位置を越える
if colm < xPos + maxSSize then Break;
end;
S_SearchClearMark(0); // 検索マークのクリア
// 手前でヒットした場合の位置補正
// 手前でヒットすると次の検索では指定位置を通り過ぎてしまうので、
// ここからは検索ではなく1文字送りで指定位置まで移動する。
if xPos < colm then
begin
while xPos < colm do
begin
S_Right();
S_BeginSelect();
xPos := S_GetSelectColmFrom();
S_CancelMode();
end;
// 全角文字・TAB文字の途中用の再補正
if xPos > colm then S_Left();
end;
// 見つからなかったらエラー(あり得ないはず)
if lineP <> StrToInt( S_ExpandParameter( '$y' ) ) then
begin
S_Jump( lineL, 0 ); // カーソルを戻す
MessageBox( 'ジャンプに失敗しました', 'error', 0 );
// Exit;
end;
end;
// --- ここまで ---