Вниз
Скачать: CL | DM;

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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.017 c
15-1232350793
nnov
2009-01-19 10:39
2009.03.29
Железо - Видюха


15-1232830550
Unknown user
2009-01-24 23:55
2009.03.29
Delphi 2009 стоит ли переходить?


15-1232383209
Добежал
2009-01-19 19:40
2009.03.29
Запретить Windows уходить в hibernate и отключать экран


15-1233122782
Труп Васи Доброго
2009-01-28 09:06
2009.03.29
Windows 7 первые впечатления


2-1233240872
Fonts
2009-01-29 17:54
2009.03.29
Про фонты дисплея




   Наверх