![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Memo [D7, XP]
kyran29 © (2009-10-09 07:21:00)При выделении и копировании строк из одного поля Memo во второе поле Memo2.Lines.Add(Memo1.SelText). Это понятно!
Но как только курсор находится не вначале строки IntToStr(Memo1.SelStart) > 0
Копируется обрезанная строка, т.е. с того места, откуда начали выделять строки.
Как вернуть ту часть строки, которая не была выделена? Так же при окончании выделения. Если в строке выделено >= 3 символов, то выделяем целую строку, если < 3 выделение с этой строки выделение снимаем. Скопированные строки во втором поле Memo должны быть целые.
MonoLife (2009-10-09 10:22:00) [1]
Var
sslen, rslen: integer;
begin
rslen:=Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
sslen:=SendMessage(Memo1.Handle, EM_LINEINDEX, rslen, 0);
Memo1.SelStart:=sslen;
Memo1.SelLength:=Length(Memo1.Lines.Strings[rstart]);
Memo2.Lines.Add(Memo1.SelText);
end;
во, типа такого..
MonoLife (2009-10-09 10:10:00) [2]Не, фигня получилась:)
MonoLife (2009-10-09 08:33:00) [3]
> kyran29 © (09.10.09 07:21)
...
Var
sslen, rslen: integer;
begin
rslen:=Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
sslen:=SendMessage(Memo1.Handle, EM_LINEINDEX, rslen, 0);
Memo1.SelStart:=sslen;
Memo1.SelLength:=Memo1.SelStart+Memo1.SelLength;
Memo2.Lines.Add(Memo1.SelText);
end;
MBo (2009-10-09 07:44:00) [4]хм... вроде вчера отвечал на это же...
Логика же простая - находим строку, в которой стоит курсор, и если длина выделения достаточная, то копируем ее.