Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.042 c
1-1208283210
Михаил
2008-04-15 22:13
2009.03.29
Как задать пределы шкалы по осям диаграммы Excel ?


6-1196111615
Lamer666
2007-11-27 00:13
2009.03.29
TWebBrowser и предупреждения системы безопастности??


15-1232336105
Slider007
2009-01-19 06:35
2009.03.29
С днем рождения ! 17 января 2009 суббота


2-1233746718
Asker
2009-02-04 14:25
2009.03.29
как завершить приложение


11-1197987179
nikfel
2007-12-18 17:12
2009.03.29
Как проиграть wav-файл.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский