Q&A

  • 레지스트리 읽을 때 서브메뉴까지 한번에 부르는 방법이 있나요?


<그림설명> 본소스 실행시 레지스트리에서 이렇게만 읽어들임

그림과 같이, 제가 한 것은 6개의 주메뉴(제가 path로 설정한 직후의 것들)

만 나옵니다만...원래는 각자가 수십개씩의 서브메뉴가 있고 그 밑에 또 하위

메뉴들이 있습니다. 이것을 물어보니까, while 혹은 for문으로 돌려서 구현하라

하는데요, 아무리 생각해봐도 애초에 단 한번의 읽기로 저 밑의 서브메뉴들

전부를 보여주는 기능이 있을 것 같은데요...

<작성 소스>
procedure TForm1.MenuClick(Sender: TObject); //그림의 menu클릭시에
var
    index : integer;
    items : string;
    itemName : string;
    mItem : TMenuItem;

begin
    path := '\SOFTWARE\경로1\경로2'; //이 뒤의 경로가 그림의 6개메뉴

//레지스트리의 값을 읽어 온다.
    items := GetRegString(path, 'Items', 'nothing');
    while items <> '' do
      begin
        index := pos('|',items)-1;  
        if index <= 0 then index := length(items);
        itemName := copy(items, 1, index);
        delete(items,1,index+1);    //얻은 itemName과 '|' 삭제

         mItem := TMenuItem.Create(Menu);
         mItem.Caption := itemName;
         mItem.Name := itemName;
         menu.Add(mItem);      
      end;
end;

이렇게 하면, 그림대로는 나옵니다만.. 그 뒤의 서브메뉴들을 부르려면 꼭

while문등을 각각의 경로마다 호출해서 써야하나요? 단번에 모든 서브메뉴들

을 보여주게는 할 수 없을까요?  
2  COMMENTS
  • Profile
    최용일 2004.01.22 01:10
    안녕하세요. 최용일입니다.

    이런 경우는 for나 while같은 반복문만으로는 결과값을 구하기 힘들죠... 이럴때 쓰이는게 재귀호출입니다. 한번 이용해보세요...

    하드디스크에서 디렉토리 목록을 구한다거나 님과 같이 레지스트리 목록을 구한다거나 할 때 쓰이는 방법입니다.

    지금 델파이가 없어서 예제를 만들어드리긴 힘들구요... 자료구조책에 보시면 퀵소트나 트리탐색하는 부분을 살펴보시면 될겁니다...

    아참 델파이의 TList.Sort도 재귀호출을 해서 퀵소트로 정렬합니다. 델파이 소스 찾아보세요...

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

  • Profile
    최원식 2004.01.27 09:51
    ^^감사드려요