Q&A

  • 트리뷰에서 자식노드 추가시....
안녕하세요. 트리뷰땜에 미쳐가는 델초보입니다.
또 질문합니다.

트리뷰가 다음과 있습니다.
Root
   a
     ab
       abc
     ac
   b
     ab
     bc

위와 같이 있을때, ListBox1 에 0 번째 아이템부터 ab, ac, bc 가 있고, ListBox2 에 abc 가 있다고 가정합니다.
하고자하는 작업은... ListBox1 의 아이템을 하나씩 읽어서 ListBox2 에 있는 아이템을 트리뷰에 자식노드로 달아야합니다.
자식노드가 추가되긴 되는데, 같은 값이 중복되어서 들어갑니다.
그 이유는... 위의 트리뷰에서 ab 노드 밑에 자식노드 abc 가 이미 존해하고 있습니다.
따라서, ListBox1 에 0번째 아이템에 ab 라는 노드를 트리뷰에서 찾아서 자식노드 abc를 추가하면 다음과 같은 현상이 발생하겠죠.

Root
   a
     ab
       abc
       abc   <-- 문제점...
     ac
       abc
   b
     ab
       abc
     bc  
       abc
그래서 자식노드를 추가할때, 현재 노드의 바로 밑에 자식노드에 추가할 자식노드(ListBox2 의 아이템들)가 있는지 없는지를 알아야됩니다.
해결할 방법이 없을까요 ?
도와주세요.  
1  COMMENTS
  • Profile
    최용일 2002.09.28 02:18
    안녕하세요. 최용일입니다.

    쩝~ 예전에 했던것들을 조금씩만 응용하셨으면 될텐데....

    시간나시면 트리뷰의 속성과 메소드들에대해서 델파이 헬프를 한번 차근차근 보세요...

    function FindChildNode(Node: TTreeNode; const NodeText: string): Boolean;
    // Node의 Child(1단계아래만검사)중에서 NodeText란 이름을 가진 노드가 있는지 검사
    var
        ChildNode: TTreeNode;
    begin
        Result := False;
        ChildNode := Node.GetFirstChild; // Node의 첫번째 자식노드얻기
        while ChildNode <> nil do // 자식노드가 있다면
        begin
            if CompareText(NodeText, ChildNode.Text) = 0 then
            // 자식노드의 이름이 NodeText와 같은 이름이라면
            begin
                Result := True;
                Break; // 루프종료
            end;
            ChildNode := Node.GetNextSibling; // Node의 다음번 자식노드 검색
        end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
        CurNode: TTreeNode;
        Index: Integer;
    begin
        // 트리뷰의 모든 아이템 검사
        CurNode := TreeView1.Items.GetFirstNode;
        repeat
            if ListBox1.Items.IndexOf(CurNode.Text) <> -1 then
            // 노드 이름이 첫번째 리스트박스에 있다면
            begin
                for Index := 0 to ListBox2.Items.Count - 1 do
                // 두번째 리스트박스에 있는 이름들을 추가
                begin
                    if not FindChildNode(CurNode, ListBox2.Items[Index]) then
                    // 노드의 Child노드를 검색해서 두번째 리스트박스에 없는 이름만 추가
                      TreeView1.Items.AddChild(CurNode, ListBox2.Items[Index]);
                end;
            end;
            CurNode := CurNode.GetNext;
        until CurNode = nil;
    end;

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

    • 김상수
    • 2002.09.27 20:24
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 최병철
      2002.09.27 20:28
      QRExpr 컴포넌트 위에 바로 레이블 속성 갭션에 "%"를 하면 ......
    • 김상수
      2002.09.28 05:56
      님에 답변을 제대로 이해했는지 모르겠지만 QRLabel 컴포에 캡션속성에  % 를 주라는 말...
    • 최병철
      2002.09.28 21:30
      죄송 합니다. 테스트는 하지 못하고, mask속성에 ###0.0%;-0.0%;으로 한번 해 보세요. 엑셀에서...
    • 김상수
      2002.09.28 21:52
      답변 감사드립니다.. 그런데 잘 안되네염 제 생각에도 직접 코딩하는 방식으로 해야할꺼 같은데...
    • 타락천사
      2002.10.21 19:23
      안녕하세여. 타락임다.. 직접 연결해 보는게 젤로 조을거 같습니다. 연결되면 작업을 시작하고요, 일...
    • KDDG_ZZOM
      2002.09.27 19:50
      저도 잘은 모르지만.... DLL만들때 파라미터를 String을 사용하면 잘되다가 어느순간에 안될때도있었고요 ...
    • 김상수
    • 2002.09.27 19:08
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.09.28 02:21
      안녕하세요. 최용일입니다. FindFirst, FindNext, FindClose세가지만 사용하시면 검색가능합니다. 서...
    • 최병철
      2002.09.28 18:28
      이렇게 바쁜 일과 중에도 답장을 주시에 대한히 감사 합니다. 님의 말씀대로 델이이 헬프에서 예제...
    • 최용일
      2002.09.28 23:01
      안녕하세요. 최용일입니다. 아래와 같은 식으로 하세요... 그리고 빠른 검색을 위해서 질/답의 머릿...
    • 최병철
      2002.10.01 22:32
      고맙습니다. 이렇게 바쁜 일과에도 답변을 주시어 대단히 감사 합니다. 많은 도움이 되었읍니다
    • shem
    • 2002.09.27 18:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정경철
      2002.10.01 13:55
      오라클에 연결 할려면 우선 클라이언트 컴퓨터에는 오라클에서 제공하는 프로그램(Net8 인가...)이 있습니...
    • sunny
    • 2002.09.27 12:08
    • 1 COMMENTS
    • /
    • 1 LIKES
    • 최용일
      2002.09.28 02:18
      안녕하세요. 최용일입니다. 쩝~ 예전에 했던것들을 조금씩만 응용하셨으면 될텐데.... 시간나시면 트...
    • Atom
    • 2002.09.27 11:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 서영대
      2002.09.30 23:29
      인터넷을 돌아다니다 구했는데... 2K인지는 확실하지 않고, FlatStyle_D6.dpk 라고 Delphi 6용 dpk있는 ...
    • sunny
    • 2002.09.27 06:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최병철
      2002.09.27 18:28
      자료실에 좋은 예제가 있읍니다. 검색 방법은 "생산"이라는 검색 키워드를 사용하여 검색을 해 보세요....
    • 김상수
    • 2002.09.27 05:57
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최병철
      2002.09.27 20:15
      프로그램 소스 보면 대충 알겠는데, 일단 아래의 내용들을 참고 하세요 가정으로 메인 폼이 Form1이고,...
    • 김상수
      2002.09.28 05:51
      님의 답변대로 하니깐 에러는 없더군요... 그런데 중요한 부분이 안되는거 같아서염 서브폼에 ...
    • 짱아
    • 2002.09.27 04:16
    • 8 COMMENTS
    • /
    • 0 LIKES
    • 겨울바다
      2002.09.27 18:37
      그냥 FormatFloat 사용해서 , 찍어 주시고 IntToStr 로 String 형으로 바꾸세요 -_-;;;
    • 짱아
      2002.09.27 19:22
      변수 gedu 이 string형이기 때문에.. formatfloat을 사용해 ,를 찍어 주지 못합니다...   QRLabe...
    • 박성훈
      2002.09.28 06:52
      QRLabel11.Caption := FormatFloat('#,0', StrToIntDef(MnuF1_1.gedu,0));
    • 김상수
      2002.09.27 05:33
      살다보니 답변할 일도 다 있네염..ㅋㅋㅋ 저도 그 같은 상황이 있어서 여기에 물어보니 쿼리컴...
    • 짱아
      2002.09.27 19:12
      MnuF1_1.gedu 이것 자체가 db에서 가지고 오는 데이타가 아니라.. ㅡㅡ; 변수이기 때문에... 아래방법은 ...
    • 최병철
      2002.09.27 18:13
      함수  FormatFloat(A,B ) 가 있읍니다. 요놈을 잘 활용해 보세요 A은 출력 형식이고, B는 ...
    • 짱아
      2002.09.27 19:02
      ㅡㅡ; 다들 답변 감사합니다.. 허나.. QRLabel11.Caption := MnuF1_1.gedu; 에서 QRLabel은 문자형데이...
    • • • •
    • 김유철
    • 2002.09.27 04:04
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.09.28 02:26
      안녕하세요. 최용일입니다. dcluser50.bpl에 컴포넌트가 없는건 아닌지... 패키지라고 해서 꼭 컴포넌트...
    • 노동옥
    • 2002.09.27 03:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.10.05 21:32
      지금 답변해도 보실지는 모르겠지만.... 디비에 들어가 보시면 여러개의 유저들이 있죠?? 그안에 Tab...
    • 머슴
      2002.09.27 03:22
         테이블정보   select * from tab;   select * from all_tables; &nb...
    • 이치영
    • 2002.09.27 02:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 정경철
      2002.10.01 13:58
      인터베이스6.0은 오픈소스가 있고 사용이 있습니다. 제가 알기로는 오픈소스판은 무료로 배포를 해도 된다...
    • 빠블로
    • 2002.09.27 02:45
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이정규
    • 2002.09.27 02:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정규
      2002.09.27 06:41
      ㅋㅋ 죄송합니다. 아무것도 모르고 무조건 가져다가 썼더니 무슨 문제인지도 몰랐네요 음..용량이 큰것과...