Главная страница
    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.051 c
15-1232421567
Slider007
2009-01-20 06:19
2009.03.29
С днем рождения ! 20 января 2009 вторник


15-1232375977
SP
2009-01-19 17:39
2009.03.29
Съемный диск


15-1232239056
XentaAbsenta
2009-01-18 03:37
2009.03.29
хелп! что за троян был по ссылке? я тоже попался


1-1207898982
Альф
2008-04-11 11:29
2009.03.29
Как обрубить зависший ОСХ ?


4-1205434654
Blacksus
2008-03-13 21:57
2009.03.29
Программное управление проводником Windows





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский