Q&A

  • TreeView에서 경로명과 AbsoluteIndex 값에 관해서
안녕하세요
질문은 두개 입니다.
벌써 몇일동안...좀 도와주세요. -.-

질문 1)
Edit 창에서 텍스트를 입력한 다음 버튼을 누르면 그 이름 (Edit에 입력한 텍스트)을 TreeView 에서 찾아서 그 노드의 AbsoluteIndex 값을 가지고 오고 싶습니다.
또한, 만약 Edit 창에 A라고 입력하고 버튼을 누렀을때,(아래 그림 처럼 TreeView 에서 A 라는 같은 이름의 노드들이 있다면) 세개의 A 를 검색해서 각각의 그 노드들의 AbsoluteIndex 값을 가져왔으면 합니다.

root
    가
       라
          A
    나
       A
       마
    다
       바
         A
           사

이렇게 되어 있을때, 마를 에디트창에 입력하면 마의 AbsoluteIndex 값을, A를 입력하면 A 의 각각의 AbsoluteIndex 값(3개)이 필요합니다.

질문 2)
에디트 창에 A 를 입력하고 버튼을 눌렀을때, 메모장이든 리스트 박스이건 다음과 같이

root -> 가 -> 라 -> A
root -> 나 -> A
root -> 다 -> 바 -> A

경로를 나타내게 하려고 합니다.

몇일동안 이것저것 해봤는데, 잘 안됩니다.
그럼 도와주세요.
4  COMMENTS
  • Profile
    최용일 2002.08.31 23:54
    안녕하세요. 최용일입니다.

    둘다 루프문쓰시면 간단한데요...

    procedure TForm1.Button1Click(Sender: TObject);
    begin
        SearchNode('A');
    end;

    procedure TForm1.SearchNode(const NodeName: string);
    var
        Node: TTreeNode;
    begin
        Node := TreeView1.Items.GetFirstNode;
        repeat
            if Node.Text = NodeName then
                ListBox1.Items.Add('Absolute Index: ' + IntToStr(Node.AbsoluteIndex));
                ListBox1.Items.Add('Path: ' + GetItemPath(Node));
            Node := Node.GetNext;
        until Node = nil;
    end;

    function TForm1.GetItemPath(Node: TTreeNode): string;
    begin
        Result := '';
        if Node <> nil then
        begin
            Result := Node.Text;
            while Node.Parent <> nil do
            begin
                Node := Node.Parent;
                Result := Node.Text + '->' + Result;
            end;
        end;
    end;

    ^^ 항상 즐코하세요...

  • Profile
    sunny 2002.09.01 01:01
    안녕하세요. 무식한 델초보입니다.
    function TForm1.GetItemPath(Node: TTreeNode): string;
    procedure TForm1.SearchNode(const NodeName: string);
    를 Type 절에 넣어야 되는데, 어떻게 넣는지 잘 모르겠습니다.
    책을 지금 열심히 보고 있는데, 간단히 값에 의한 전달, 참조에 의한 전달, 상수값에 의한 전달, 배열에 의한 전달 이렇게 나와 있는데, 님께서 조언해주신 것은 상수에 의한 전달은 알겠습니다.
    그래서, 그냥 Type 절에
    procedure TForm1.SearchNode(const NodeName: string);
    이렇게 넣었는데, Expected'='but'('found. 라는 메세지가 출력됩니다.
    워낙 초보적인 질문이라 송구스럽습니다.

  • Profile
    최용일 2002.09.01 01:05
    안녕하세요. 최용일입니다.

    앞에 TForm1.이란게 붙어있잖아요. 클래스의 메소드입니다.

    그러니까 TForm1안에 선언하시면 됩니다. TForm1은 님이 만드신 폼명입니다.

    type
        TForm1 = class(...)
            ......
        private
            procedure SearchNode(const NodeName: string);
            function GetItemPath(Node: TTreeNode): string;
            ......
        end;

    ^^ 항상 즐코하세요...        

  • Profile
    sunny 2002.09.01 01:25