PalR, твоя ошибка в том, что ты не прибавляешь к SelLength еще символы переноса строки #13#10  А также не учёл тот факт, что свойство CaretY указывает номер линии начиная с 1, а в свойстве Lines нумерация строк с 0  То есть в твоём случае нужно было написать так:
| Код | // предварительно курсор уже поставлен на начало откуда выделять // ищем конец сообщения и сколько символов выделять SunEdit.SelLength := 0; for i:= SunEdit.CaretY to SunEdit.Lines.Count-1 do begin SunEdit.SelLength := SunEdit.SelLength + Length(SunEdit.Lines[i-1]) + 2; // Прибавить 2 if copy(SunEdit.Lines[i],1,2)='//' then begin break; end; end;
|
Это если курсор стоит в начале строки. Если же он находится в середине, то нужно дополнительно вычесть из SelLength значение CaretX:| Код | SynEdit.SelLength := SynEdit.SelLength - SynEdit.CaretX + 1; |
А вообще можно написать еще проще, используя BlockBegin и BlockEnd:
| Код | SynEdit.BlockBegin := SynEdit.CaretXY; for i := SynEdit.CaretY to SynEdit.Lines.Count-1 do if copy(SynEdit.Lines[i], 1, 2) = '//' then begin SynEdit.BlockEnd := BufferCoord(1, i+1); break; end;
|
P.S. Только не SunEdit, а SynEdit |