Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TCheckListBox [D7, XP]


Alex8 ©   (2007-08-15 16:10:00) 

Уважаемые мастера !
Вот такая получается фокус :
(Здесь lbOr - TCheckListBox.)

procedure TfrmVib.lbOrClick(Sender: TObject);
Var i: Word;
   r1: String;
begin
  i := lbOr.ItemIndex;
  r1 := lbOr.Items[lbOr.ItemIndex];  // r1='a'
  r1:= lbOr.Items[i];     // r1='a'
  r1:= lbOr.Items[i];     // r1='a'
  r1:= lbOr.Items[i];     // r1='a'
  r1:= lbOr.Items[i];     // r1=''
end;

И как бы я не варьировал (один оператор r1:=..; несколько одинаковых)
все результаты верные, а последний дает r1=''.  

В чем дело? Подскажите. Спасибо


Alien1769   (2007-08-15 19:47:00) [1]


> Прошу прощения, но я не понял,
> чем отличаются  lbOr.Items[0] и lbOr.Items[ last]


тебе уже Германн сказал, что

>  Но на данную переменную ссылок больше нигде нет.


Германн   (2007-08-15 19:19:00) [2]


> > Watches показывает белиберду.
>   Практика показывает, что это так.
> Но не логично.
>  После последней строчки я еще не вышел
> из процедуры. Очередной выполняемый оператор "End".
>

Да из процедуры еще не вышел. Но на данную переменную ссылок больше нигде нет.


Alex8   (2007-08-15 19:14:00) [3]

> Watches показывает белиберду.
  Практика показывает, что это так.
Но не логично.
 После последней строчки я еще не вышел
из процедуры. Очередной выполняемый оператор "End".
На него указывает стрелка.
 Значит попал на "End", значит вышел из процедуры. Так ?
Наверное, так. Спасибо.


Германн   (2007-08-15 18:52:00) [4]


> А я смотрел в пошаговом режиме в тексте
> процедуры и в окне Watches.
>  Так в чем я был не прав ?
>

После последней строчки r1:= lbOr.Items[i];     // r1='' смысл локальной переменной r1 терятся полностью. Поэтому Watches показывает белиберду.


Alex8   (2007-08-15 18:39:00) [5]

>Что покажет ShowMessage?
Проверил.
ShowMessage показал все правильно.
А я смотрел в пошаговом режиме в тексте
процедуры и в окне Watches.
 Так в чем я был не прав ?


Германн   (2007-08-15 17:55:00) [6]

А если сделать так:
procedure TfrmVib.lbOrClick(Sender: TObject);
Var i: Word;
  r1: String;
begin
 i := lbOr.ItemIndex;
 r1 := lbOr.Items[lbOr.ItemIndex];  // r1='a'
 r1:= lbOr.Items[i];     // r1='a'
 r1:= lbOr.Items[i];     // r1='a'
 r1:= lbOr.Items[i];     // r1='a'
 r1:= lbOr.Items[i];     // r1=''
  ShowMessage(r1);
end;
Что покажет ShowMessage?


Alex8   (2007-08-15 17:48:00) [7]

Прошу прощения, но я не понял,
чем отличаются  lbOr.Items[0] и lbOr.Items[last]
от остальных строк. То есть не пойму, о чем помнить.

Кстати, в приведенном мной примере все происходило
именно при i=0.


Alien1769   (2007-08-15 17:21:00) [8]

не забывай про lbOr.Items[ 0] и про lbOr.Items[ last]


Наверх

Титульная страница Поиск, карта сайта Написать письмо