Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 00:51   #1
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию Работа с указателями

Делаю поиск по TreeView заданного узла.

Вот такой:

Код:
procedure TMKB10Form.SearchCurrent();
var
  node: ^TTreeNode;
  data: PData;
{
PData = ^Data;
Data = record
   code: string;
end;
}
begin
  if (CurrentValue <> null) and (CurrentValue <> '')
    then
      begin
        node := pointer(TreeView.TopItem);

        repeat
          data := node^.Data;

          if (data^.code = copy(CurrentValue, 0, length(data^.code)))
            then
              begin
                if (node^.Count > 0)
                  then
                    begin
                      node^.Expand(false);
                      node := pointer(node^.getFirstChild);
                    end
                  else
                    begin
                      node^.Selected := true;
                      break;
                    end;
              end
             else
               begin
                 node := pointer(node^.getNextSibling)
               end;
        until (node = nil);
      end;

  dispose(node);
end;
В дату каждой ноды везде записываются переменные типа PData (они там точно есть).

Насколько я понимаю указатели, node := pointer(TreeView.TopItem) и т.п. дадут мне ссылку на нужную ноду дерева, к данным которой я смогу обратиться через node^.
Значит, временный указатель data надо присваивать как data := node^.Data. И даже присвоение происходит - там появляется адрес.

Но, когда по указателю иду в data^.Code, то там инаксессибль валъю.
А залезши по указателю, например, в node^.Text, получаю "'SV‹ò‹Ø‹C'#4'è¾'#$B#0#0'€{$'#0#$F' …'#0#0#0'‹Æ‹'#$15'xÎC'#0'è‹'#$18'ü ÿ„Àt‹V'#8'‹Ãèuðÿÿ‹V'#$C'‹Ãèÿðÿÿ‹V' #$14'‹Ãè•òÿÿ‹V'#$18'‹Ãèãòÿÿ‹V ‹Ãèóÿÿ‹V'#$1C'‹Ãè'óÿÿ‹ÆèT÷ÿÿ‹Ð‹Ãè+ ÷ÿÿ‹Æè”öÿÿ‹Ð‹Ãè“öÿÿ‹Æè\öÿÿ‹Ð‹Ãè[öÿÿ‹ÆèÄöÿÿ‹Ð‹Ãè#÷ÿÿ^[Ë֋Ã.................и.т.д.".

То есть, явно указатель куда-то не туда.

ЧЯДНТ?

Последний раз редактировалось yaapelsinko; 15.02.2012 в 01:01.
yaapelsinko вне форума Ответить с цитированием
Старый 15.02.2012, 00:56   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А зачем так? Что мешает работать с Node как с TTreeNode без заморочек?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.02.2012, 01:10   #3
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию

Да это я с аксес виолейшынами воевал, как обычно. Это вот последний вариант алгоритма, просто решил сразу менять и обход, и способ доступа к переменным, чтобы точно нчего лишнего не создавать, нигде ничё не оставалось чтоб.

Ну вот, поменял ^TreeNode на TreeNode - теперь ищет и кажет. А ещё у меня дерево с динамической подгрузкой данных ветки при её развороте, йоу. \m m/

Но блин так же тоже должно работать?
yaapelsinko вне форума Ответить с цитированием
Старый 15.02.2012, 01:13   #4
yaapelsinko
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 67
По умолчанию

Да, кстати, а вот условие выхода из цикла - он выполнится вообще? Когда дойду до последнего сиблинга, то некстсиблинг будет нил, или первый?
yaapelsinko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с указателями stas135642 Общие вопросы C/C++ 2 21.11.2010 15:05
Работа с указателями. Alex Cones Общие вопросы Delphi 8 06.07.2010 18:34
Работа с указателями Masip Общие вопросы Delphi 2 12.06.2010 12:49
Работа с указателями (C) pixel_ Помощь студентам 1 28.08.2009 14:07
Работа с указателями Mango Помощь студентам 2 23.11.2008 10:33