![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятка с 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