Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
ВнизFor loop control variable must be simple local variable Найти похожие ветки
← →
R13 (2009-01-30 00:56) [0]procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i=0 to 5 do memo1.Lines.Delete(i);
end;
Вылезает ошибка: For loop control variable must be simple local variable
Что я не так сделал? Че-т вообще не понимаю (=
← →
Юрий Зотов © (2009-01-30 01:02) [1]Двоеточие пропущено.
i := 0
← →
R13 (2009-01-30 01:04) [2]*WALL*
я уж с горя сюда написал. всегда работало, а тут вдруг наотрез отказалось :)
главное ошибка вылезает не о том, что двоеточие пропущено, а что i не является локальной переменной.
← →
Юрий Зотов © (2009-01-30 01:12) [3]> R13 (30.01.09 01:04) [2]
> ошибка вылезает не о том, что двоеточие пропущено, а что i не является
> локальной переменной.
Нет, не так. Сама по себе, переменная i тут ни при чем и в сообщении о ней ничего не говорится. В нем говорится, что там, где должен быть оператор присваивания с локальной переменной, стоит что-то другое (в данном случае - логическое выражение).
← →
Германн © (2009-01-30 01:52) [4]Т.е. На бога надейся, а сам не плошай!
:)
Сообщения компилятора всего лишь подсказка. Понять эту подсказку должен сам программист.
← →
Ega23 © (2009-01-30 10:18) [5]
> for i=0 to 5 do memo1.Lines.Delete(i);
Вообще-то:for i:=5 downto 0 do memo1.Lines.Delete(i);
И учти, что если memo1.Lines.Count будет меньше 6, тоList index out of bounds
получишь.
← →
qqq (2009-01-30 11:43) [6]
> Ega23 © (30.01.09 10:18) [5]
не проще лиfor i:=5 downto 0 do memo1.Lines.Delete(0);
тогда и направление перебора не важно
← →
Ega23 © (2009-01-30 12:02) [7]
> for i:=5 downto 0 do memo1.Lines.Delete(0);
procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;
← →
qqq (2009-01-30 12:13) [8]
> Ega23 © (30.01.09 12:02) [7]
ну и как это сказывается на удалении 0-й строки?
← →
Ega23 © (2009-01-30 12:18) [9]Если удаляешь последний элемент, то не выполнится System.Move, т.к. сначала произойдёт декремент FCount и его значение станет равным Index
А если удалять всегда первый, то System.Move выполнится Count-1 раз.
← →
KSergey © (2009-01-30 13:11) [10]> Ega23 © (30.01.09 12:18) [9]
Это типа все правильно, но если удаляем все строки (что предполагается обращением каждый раз к последнему элементу), то проще memo1.Lines.Clear сразу вызвать - и циклов не надо :)
← →
Ega23 © (2009-01-30 13:15) [11]
> то проще memo1.Lines.Clear сразу вызвать - и циклов не надо :)
Если уж на то пошло, то Memo1.Clear - ещё проще.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.03.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.071 c