На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> TreeView и Data: что к чему???
    Считываю информацию из файла, перерабатываю её и заношу в список и масивы...
    Затем по полученным данным строю дерево
    ExpandedWrap disabled
       Var
         f1:textfile; filename:s50;
         st: string;
         l,j:integer;
         D, n:integer;
         Node,HNode:TTreeNode;
         p:p_s_type;
         f:Type_frames;
       
        {Вывод узла дерева}
        Procedure OutS(p:p_s_type;Col:integer);
        Var
        j:byte;
        Child:TTreeNode;
        Idd:String;
       
       begin
         j:=1;
         while p<>nil do
           begin
           St:=p^.name;
           Idd:=p^.id;
           Child:=TreeView1.Items.AddChildObject(Node,St,p);
           p:=p^.next;
           end;
       end;
        begin
          repeat
      //считываю из файла и преобразую в процедуре read_frm
           assignFile(f1,ExtractFilePath(Application.ExeName)+'Data\'+'inter.dat');
           {$I-}    reset(f1);   {$I+}
          until ioresult=0;
          while not eof(f1) do read_frm(f1,Count[1]);
          closeFile(f1);
       
          TreeView1.Items.Clear;
          if Count[1]>0 then
          begin
          for n:=1 to Count[1] do
          begin
               St:=frames[1,n].name;
               p:=frames[1,n].synt;
               Node:=TreeView1.Items.AddObject(nil,St,pointer(frames[1,n].iddr));
               HNode:=Node;
               OutS(p,0);
          end;
        end;
      end;

    Теперь пытаюсь из поля Data каждой ветке вытащить занесенный туда идентификатор (а то, что он туда заносится проверено...так и есть) для того, чтобы по нужному этому номеру выделить(раскрыть) нужную ветку дерева

    ExpandedWrap disabled
            FOR i:=0 To TreeView1.Selected.Count-1 Do
            begin
            IF Integer(TreeView1.Selected.Item[i].Data) = ID
            Then Begin
                  TreeView1.Selected.Item[i].Expand(False);
                  TreeView1.Selected.Item[i].Selected:=True;
                  TreeView1.Repaint;
                  Exit;
                 End;
            End;


    Пишу пока вот так..... Но проверить работу этого куска кода не могу, т.к. значение Integer(TreeView1.Selected.Item[i].Data) всегда неверное, набор цифр 42354154 и т.д. Почему мне никак невытащить значение поля Data???
      var
      s:string;
      ID:integer;

      вот так вот вставлять

      TreeView1.Items.Item[I].Data:= Pointer( ID );

      а вот так вот считывать

      s:= IntTostr( Integer(Node.Data) );
      Сообщение отредактировано: RAdmin -
        Цитата RAdmin @ 18.08.04, 19:25
        var
        s:string;
        ID:integer;

        вот так вот вставлять

        TreeView1.Items.Item[I].Data:= Pointer( ID );

        а вот так вот считывать

        s:= IntTostr( Integer(Node.Data) );

        А разве AddObject служит не для этого же...в смысле вставлять???? :blink:
        Сообщение отредактировано: DELPHIna -
          AddObject создаёт нод с указанной DATA, но не изменяет уже сущесвующие.
            Цитата RAdmin @ 18.08.04, 19:43
            AddObject создаёт нод с указанной DATA, но не изменяет уже сущесвующие.

            Дак я и создаю узел с указанной Data...а теперь хочу его вытащить (способ s:= IntTostr( Integer(Node.Data)); мне не подходит ....мне нужно перебрать все узлы и все Data начиная с начала до конца, вот я использую Integer(TreeView1.Selected.Item[i].Data); ....) но не получается :(

            И ещё вопрос "Почему для подчиненных узлов Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(idd));
            значение integer(TreeView1.Selected.Data) всегда неверное, типа 9865412, а для родителя Node:=TreeView1.Items.AddObject(nil,St+IntToStr(frames[1,n].iddr),pointer(frames[1,n].iddr)); верное???? Т.е. тот идентификатор, который я и заносила....
            "
            Сообщение отредактировано: DELPHIna -
              s:= IntTostr( Integer(Node.Data));
              и
              Integer(TreeView1.Selected.Item[i].Data);
              это одно и тоже (я просто на твой код не смотрел)
              ------- ТУТ ВСЁ ПРАВИЛЬНО ----------

              Но есть у меня сомнения насчёт AddObject (чесно признаюсь ниразу им не пользовался) где-то в этом районе ошибка.

              Добавлено в :
              Быть может попробуешь заменить AddObject на стандарный способ и применить
              Node := Pointer( ID );
              Сообщение отредактировано: RAdmin -
                Цитата RAdmin @ 18.08.04, 20:58
                s:= IntTostr( Integer(Node.Data));
                и
                Integer(TreeView1.Selected.Item[i].Data);
                это одно и тоже (я просто на твой код не смотрел)
                ------- ТУТ ВСЁ ПРАВИЛЬНО ----------

                Но есть у меня сомнения насчёт AddObject (чесно признаюсь ниразу им не пользовался) где-то в этом районе ошибка.

                Добавлено в :
                Быть может попробуешь заменить AddObject на стандарный способ и применить
                Node := Pointer( ID );

                Пробовала и твой способ всё равно не получается.....при попытке считать значение Data у подчиненных веток выводится всякая ерунда....если нетрудно посмотри мой код.... правда там много чего закомментировано....в том числе и все способы добавления значения Data в узле.
                * Смотреть надо в procedure TForm1.load_base - это загрузка дерева
                * в procedure TForm1.TreeRazvorot(Sender: TObject); - я пыталась выделить любой узел по ID
                * в procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode); я пыталась проверить соответствие значения Data в выделенных узлах

                Я бьюсь над решением уже весь день....не пойму что не так??? :wall: Буду благодарна за любую наводку.....
                Прикреплённый файлПрикреплённый файлex.ZIP (14.73 Кбайт, скачиваний: 98)
                  DELPHIna, пожалуйста
                  M
                  Новый вопрос - новая тема. Это прежде всего, надо для успешного поиска другими участниками.
                    Кароче вот:

                    Вспомни что я писал

                    ID:integer;
                    Data:= Pointer( ID );

                    а у тебя IDD это string.




                    ExpandedWrap disabled
                       
                        {Вывод узла дерева}
                        Procedure OutS(p:p_s_type;Col:integer);
                        Var
                        j:byte;
                        Child:TTreeNode;
                        Idd:String;
                       {FF} ff:integer;
                        i:integer;
                       
                       begin
                         j:=1;
                         while p<>nil do
                           begin
                           St:=p^.name;
                           Idd:=p^.id;
                        {FF}   ff:=StrToInt(Idd);
                           Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(ff));


                    Добавлено в :
                    Ну или вот на это замени
                    ExpandedWrap disabled
                          Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(strToInt(idd)));


                    Добавлено в :
                    Song, вопрос не менялся
                    Сообщение отредактировано: RAdmin -
                      Цитата RAdmin @ 18.08.04, 23:21
                      Кароче вот:

                      Вспомни что я писал

                      ID:integer;
                      Data:= Pointer( ID );

                      а у тебя IDD это string.




                      ExpandedWrap disabled
                         
                          {Вывод узла дерева}
                          Procedure OutS(p:p_s_type;Col:integer);
                          Var
                          j:byte;
                          Child:TTreeNode;
                          Idd:String;
                         {FF} ff:integer;
                          i:integer;
                         
                         begin
                           j:=1;
                           while p<>nil do
                             begin
                             St:=p^.name;
                             Idd:=p^.id;
                          {FF}   ff:=StrToInt(Idd);
                             Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(ff));


                      Добавлено в :
                      Ну или вот на это замени
                      ExpandedWrap disabled
                            Child:=TreeView1.Items.AddChildObject(Node,St+Idd,pointer(strToInt(idd)));


                      Добавлено в :
                      Song, вопрос не менялся

                      Неужели всё было так просто.....пару символов....а столько мучений :wacko:
                      Спасибо за помощь..... (просто столько эмоций....что надо пар выпустить....)
                        Почему нельзя просто:
                        ExpandedWrap disabled
                          Child:=TreeView1.Items.AddChildObject(Node,St+Idd, Pointer(p^.id));
                          .....
                          id := Integer(Node.Data);
                        ??
                          Цитата Dynamic @ 20.08.04, 10:57
                          Почему нельзя просто:
                          ExpandedWrap disabled
                            Child:=TreeView1.Items.AddChildObject(Node,St+Idd, Pointer(p^.id));
                            .....
                            id := Integer(Node.Data);
                          ??

                          можно и так....(в принципе так и было....только я упустила из виду самое важное Pointer...прописать перед p^.id... и получалось следовательно неправильно) ... Я так и сделала, как Вы пишете...и всё работает....

                          Вот, что значит невнимательность.....
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0788 ]   [ 16 queries used ]   [ Generated: 18.04.26, 23:13 GMT ]