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

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

Непонятка с TTreeView [D7, XP]


Wood ©   (2008-10-03 11:22:00) 

Добрый день!
Что-то заклинило у меня.. Хотел получить первый нулевой уровень по отношению к дочернему 1-му уровню
код:

1. tv1: TTreeView
...
2. var
3.  Node: TTreeNode;
4.  ind: integer;
5. begin
6.  if tv1.Selected.Level<>0 then
7.   begin
8.     Node:=tv1.Selected;
9.       While Node<>nil do
10.         begin
11.          Node:=Node.GetPrev;
12.          if node<>nil then
13.           begin
14.            if Node.Level=0 then
15.             begin
16.              Ind:=TNodeData(Node).sInd;
17.              break;
18.             end;
19.           end;
20.         end {while};
21.       end else
22.        Ind:=TNodeData(TV1.Selected).sInd;
23. end;

Проверяю трассировкой стр. 14. if Node.Level=0:  Node.Level действительно равно 0, но после этой строки условие не выполняется и уходит на 23.


Wood   (2008-10-03 16:05:00) [1]


> Поросенок Винни-Пух ©   (03.10.08 13:03) [13]

Истинная правда! f7 кнопка, знаешь? Дык вот, после ифа, при нажатии ее, сразу уходило в 23, не останавливаясь на break. Я, честное пионерское, никогда не сталкивался с тем, что брейкпойнт не останавливается на break
Ну, ступил я с неиспользуемой переменной, бывает.. особенно в конце рабочего дня, но врать, ни-ни.. Зачем бы мне тогда здесь напрягать мастеров по чем зря...


Поросенок Винни-Пух   (2008-10-03 13:03:00) [2]

а зачем надо было врать, что трассировка доходит до ифа и что иф идет не по той ветке?


{RASkov}   (2008-10-03 11:52:00) [3]

> [9] Поросенок Винни-Пух ©   (03.10.08 11:46)

А он таки нигде у него в коде из [0] и не используется.... :)

Автор, хватит юлить....)


{RASkov}   (2008-10-03 11:52:00) [4]

Упс :)


Wood   (2008-10-03 11:49:00) [5]


> Поросенок Винни-Пух ©   (03.10.08 11:44) [8]

вставлял.. Перечисляются ноды.тексты, которые идут вверх по итерации, вплоть до нулевого уровня.
Но я нашел проблему почему не выполнялся код.. Сорри за введение в заблуждение..
Не посмотрел хинт компилятора:
16.  Ind:=TNodeData(Node).sInd;
далее не использовался, а на break остановки не происходит..
Спасибо за участие.
PS: level действительно был true


Поросенок Винни-Пух   (2008-10-03 11:46:00) [6]

а если инд не используется больше нигде, то оптимизатор вправе вообьще выбросить твой иф


Поросенок Винни-Пух   (2008-10-03 11:44:00) [7]

if node<>nil then
13.           begin
                 //Вставить сюда шоумесадж с капшеном нода, чтобы убедиться, что это не тот нод, про который ты уверен, что его левел равен нулю
14.            if Node.Level=0 then


Поросенок Винни-Пух   (2008-10-03 11:42:00) [8]

я убирал бряк, все равно

там фалсе, чувак. фалсе.


Wood   (2008-10-03 11:42:00) [9]

Что-то, господа мастера, я ничего не понимаю.. Почему в моем коде действия между 15 и 18 вообще не хотят рассматриваться компилятором?:(


Wood   (2008-10-03 11:40:00) [10]

уважаемый {RASkov}, я убирал бряк, все равно..:( по логике если условие верно (уровень равен 0) то должно выполниться условие между 13 и 19, или как?


Wood   (2008-10-03 11:37:00) [11]


> значит там false

кхм...
Дерево состоит из 3 итемов: один - 0-го уровня и два - 1-го уровня. Визуально (в трассировщике) и логически, когда tv1.Selected.Level=1 (т.е., 2 или 3-й итем в дереве)  , к примеру "встаем" на 2-й итем, после первого же Node:=Node.GetPrev Node.Level равняется и должен равняться 0.
Если бы Node не равнялся 0 цикл бы продолжился, а не уходил сразу в 23


{RASkov}   (2008-10-03 11:35:00) [12]

> Проверяю трассировкой стр. 14. if Node.Level=0:  Node.Level
> действительно равно 0, но после этой строки условие не выполняется
> и уходит на 23.

Всё верно.... Брик туда и "выкидывает".... Что не так?


{RASkov}   (2008-10-03 11:33:00) [13]

Дык там же Брик... Break


Поросенок Винни-Пух   (2008-10-03 11:28:00) [14]

значит там false


Наверх

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