Показать сообщение отдельно
  #6  
Старый 28.04.2014, 18:04
Аватар для madMonia
madMonia madMonia вне форума
Новичок
 
Регистрация: 25.02.2014
Сообщения: 50
Версия Delphi: Delphi XE3
Репутация: 2545
По умолчанию

Цитата:
Сообщение от Guerron
Здесь хотел, чтобы все имеющиеся строки (ну или первые 15) были удалены вне зависимости от их содержания

Тут есть два момента:
1) Индексация в TStrings (а именно такой тип имеет свойство Lines у компонента Memo) начинается с 0 а не с 1.
2) При таком удалении Вы рискуете получить ошибку, если строк в Lines меньше 29ти. Дело в том, что при каждой команде Memo1.Lines.Delete(m);
Вы удаляете строку с номером m. Последней Вы удаляете 15ю строку, а до нее удалили уже 14ть. Таким образом, до начала удаления у вас должно быть минимум 29ть строк, чтобы после удаления 14ти из них, 15я строка все же существовала и ее можно было удалить. Надеюсь я вас не запутал.

Другими словами, удаление чего бы то ни было с помощью - плохая идея
Код:
for m:=1 to 15 do

удалять следует, хотя бы так
Код:
for m:=15 downto 1 do

А лучше вообще с помощью while.

Получается нужно удалить первые 15ть строк, а остальные, если такие есть, сохранить?

Тогда как-то так
Код:
var
  StringsToDeleteCount: integer;
begin
  if Memo1.Lines.Count > 15 
      then StringsToDeleteCount = 15
      else StringsToDeleteCount = Memo1.Lines.Count;

for m:=StringsToDeleteCount -1 downto 0 do
  Memo1.Lines.Delete(m);

Если же цель - просто очистить мемо, то лучше использовать
Код:
  Memo1.Lines.Clear;
__________________
Невозможно заточить карандаш тупым топором. Столь же тщетно пытаться сделать это десятком тупых топоров
Ответить с цитированием