> 델파이를 보면 개발 툴에서는 위쪽에 있는 메뉴들을 올리수도 있구 밖으로 빼낼 수도 있는데 그런걸 어떻게 하는지 모르겠습니다..
>
> 찾을려구 해도 어디에 있는지 찾지를 못하겠습니다..
> 아시는 분이 있으면 최대한 빠른 답변 부탁드립니다..
> 메일이나..
> 아님 답변이라도 부탁 드립니다.. 전 너무 급해서 그렀습니다..
>
> 고수님들 부탁 드립니다..
{파워러브 델파이 98년 8월호에 실린 내용 입니다.}
머릿기사에서 살펴 보았듯이 델파이 4.0은 VCL컴포넌트들에 대한 도킹기능을 제공하고 있고 이 기능을 사용해 도킹되는 툴바를 쉽게 만들어 낼 수 있다. 그러나 메뉴에 이 기능을 적용하는 것은 VCL에 비해 상대적으로 어렵다.
이 기사에서는 TControlBar와 TToolBar 컴포넌트를 사용하여 도킹기능을 갖는 메뉴를 만들어 볼 것이다. 미리 말해두겠지만... 이 과정에서는 한줄의 코딩도 필요 없다.
*첫번째... Dock Site 생성
제일 먼저 할 일은 메뉴가 붙을 곳을 한군데 이상 지정해 주는 것이다.
새 프로젝트를 시작하고 컴포넌트 팔레트의 Additional페이지에 있는 TControlBar 컴포넌트를 세개 올려놓자. 각 TControlBar의 Align 프로퍼티를 각각 alTop, alBottom, alLeft로 설정하자. 이 ControlBar들을 Dock Site로 사용하기 위해 DockSite프로퍼티가 기본값인 True로 설정되어 있는지 확인하자.
이 예제에서는 TControlBar를 사용했지만 물론 TCoolBar를 Dock Site로 사용할 수도 있다.
*두번째... 메뉴 만들기
다음으로 할 일은 메뉴를 만들어 주는 것이다. TMainMenu컴포넌트를 폼 위에 올리고 적당한 메뉴 아이템들을 만들어 주도록 하자. 한가지 주의할 것은, 한글로 메뉴의 Caption을 지정하다 보면 실제 메뉴 아이템의 이름은 N1, N2... 와 같이 붙게 되므로 나중에 혼동할 우려가 있다. 메뉴 아이템의 이름을 알아보기 쉽도록 지정해 주자.
이제 폼 위에는 메뉴가 나타날 것이다. 이 메뉴를 도킹메뉴로 만들기 위해서는 폼의 MainMenu프로퍼티를 Nil로 만들어 주어야 한다. Form1에 대한 오브젝트 인스펙터의 MainMenu 항목을 지우고 [Enter]키를 누르면 폼에서 메뉴가 사라지게 된다.
두번째 단계에서 할 일은 이것이 전부이다.
*세번째... TToolBar 컴포넌트 올려놓기
컴포넌트 팔레트의 Win32페이지에서 TToolBar컴포넌트를 선택해 폼의 윗부분에 있는 ControlBar컴포넌트 위에 올려놓자. 이 ToolBar는 두번째 단계에서 만들어 놓은 메뉴를 담게 될 것이다.
먼저, ToolBar의 폭을 적당히 조절하고 모든 EdgeBorders값을 False로 놓는다. 다음으로 ToolBar의 도킹기능을 켜주기 위해 DragKind프로퍼티를 dkDock으로 하고 DragMode프로퍼티의 값은 dmAutomatic으로 한다. 그리고 Flat프로퍼티를 True로 셋팅한다. 이렇게 하면 ToolBar위의 버튼들은 마우스가 접근할 경우에만 튀어나오게 된다. 마지막으로 ShowCaption프로퍼티를 True로 셋팅한다.
이제 ToolBar 컴포넌트에 메뉴를 담을 준비가 모드 끝났다.
*네번째... 메뉴 버튼 더하기
이맘때쯤 짐작 하겠지만, 세번째 단계에서 만들어 놓은 메뉴바는 특정한 메뉴아이템과 연결된 버튼의 컨테이너 역할을 하게 된다. 따라서 툴바는 메뉴 아이템중 최상단의 아이템과 연결된 버튼들을 담게 된다. (예를 들면 '파일', '편집', '도움말' 등...)
ToolBar컴포넌트 위에서 오른쪽 마우스 버튼을 클릭하고 컨텍스트 메뉴에서 NewButton을 선택하면 버튼이 한 개 생성된다. 생성된 버튼의 MenuItem프로퍼티에 두번째 단계에서 만들어둔 메인메뉴의 메뉴아이템중 최상위 메뉴 아이템을 지정하자. 같은 방법으로 다른 메뉴에 대한 버튼들을 만들면 ToolBar는 각 최상위 메뉴아이템에 대한 버튼을 가지게 될 것이다. 마지막으로 메뉴와 연결된 버튼들의 Grouped프로퍼티를 True로 셋팅하자.
> 안녕하십니까.. 지금 전 초보인뎅
>
> 하나 물어 볼려구요..
>
> 델파이를 보면 개발 툴에서는 위쪽에 있는 메뉴들을 올리수도 있구 밖으로 빼낼 수도 있는데 그런걸 어떻게 하는지 모르겠습니다..
>
> 찾을려구 해도 어디에 있는지 찾지를 못하겠습니다..
> 아시는 분이 있으면 최대한 빠른 답변 부탁드립니다..
> 메일이나..
> 아님 답변이라도 부탁 드립니다.. 전 너무 급해서 그렀습니다..
>
> 고수님들 부탁 드립니다..
{파워러브 델파이 98년 8월호에 실린 내용 입니다.}
머릿기사에서 살펴 보았듯이 델파이 4.0은 VCL컴포넌트들에 대한 도킹기능을 제공하고 있고 이 기능을 사용해 도킹되는 툴바를 쉽게 만들어 낼 수 있다. 그러나 메뉴에 이 기능을 적용하는 것은 VCL에 비해 상대적으로 어렵다.
이 기사에서는 TControlBar와 TToolBar 컴포넌트를 사용하여 도킹기능을 갖는 메뉴를 만들어 볼 것이다. 미리 말해두겠지만... 이 과정에서는 한줄의 코딩도 필요 없다.
*첫번째... Dock Site 생성
제일 먼저 할 일은 메뉴가 붙을 곳을 한군데 이상 지정해 주는 것이다.
새 프로젝트를 시작하고 컴포넌트 팔레트의 Additional페이지에 있는 TControlBar 컴포넌트를 세개 올려놓자. 각 TControlBar의 Align 프로퍼티를 각각 alTop, alBottom, alLeft로 설정하자. 이 ControlBar들을 Dock Site로 사용하기 위해 DockSite프로퍼티가 기본값인 True로 설정되어 있는지 확인하자.
이 예제에서는 TControlBar를 사용했지만 물론 TCoolBar를 Dock Site로 사용할 수도 있다.
*두번째... 메뉴 만들기
다음으로 할 일은 메뉴를 만들어 주는 것이다. TMainMenu컴포넌트를 폼 위에 올리고 적당한 메뉴 아이템들을 만들어 주도록 하자. 한가지 주의할 것은, 한글로 메뉴의 Caption을 지정하다 보면 실제 메뉴 아이템의 이름은 N1, N2... 와 같이 붙게 되므로 나중에 혼동할 우려가 있다. 메뉴 아이템의 이름을 알아보기 쉽도록 지정해 주자.
이제 폼 위에는 메뉴가 나타날 것이다. 이 메뉴를 도킹메뉴로 만들기 위해서는 폼의 MainMenu프로퍼티를 Nil로 만들어 주어야 한다. Form1에 대한 오브젝트 인스펙터의 MainMenu 항목을 지우고 [Enter]키를 누르면 폼에서 메뉴가 사라지게 된다.
두번째 단계에서 할 일은 이것이 전부이다.
*세번째... TToolBar 컴포넌트 올려놓기
컴포넌트 팔레트의 Win32페이지에서 TToolBar컴포넌트를 선택해 폼의 윗부분에 있는 ControlBar컴포넌트 위에 올려놓자. 이 ToolBar는 두번째 단계에서 만들어 놓은 메뉴를 담게 될 것이다.
먼저, ToolBar의 폭을 적당히 조절하고 모든 EdgeBorders값을 False로 놓는다. 다음으로 ToolBar의 도킹기능을 켜주기 위해 DragKind프로퍼티를 dkDock으로 하고 DragMode프로퍼티의 값은 dmAutomatic으로 한다. 그리고 Flat프로퍼티를 True로 셋팅한다. 이렇게 하면 ToolBar위의 버튼들은 마우스가 접근할 경우에만 튀어나오게 된다. 마지막으로 ShowCaption프로퍼티를 True로 셋팅한다.
이제 ToolBar 컴포넌트에 메뉴를 담을 준비가 모드 끝났다.
*네번째... 메뉴 버튼 더하기
이맘때쯤 짐작 하겠지만, 세번째 단계에서 만들어 놓은 메뉴바는 특정한 메뉴아이템과 연결된 버튼의 컨테이너 역할을 하게 된다. 따라서 툴바는 메뉴 아이템중 최상단의 아이템과 연결된 버튼들을 담게 된다. (예를 들면 '파일', '편집', '도움말' 등...)
ToolBar컴포넌트 위에서 오른쪽 마우스 버튼을 클릭하고 컨텍스트 메뉴에서 NewButton을 선택하면 버튼이 한 개 생성된다. 생성된 버튼의 MenuItem프로퍼티에 두번째 단계에서 만들어둔 메인메뉴의 메뉴아이템중 최상위 메뉴 아이템을 지정하자. 같은 방법으로 다른 메뉴에 대한 버튼들을 만들면 ToolBar는 각 최상위 메뉴아이템에 대한 버튼을 가지게 될 것이다. 마지막으로 메뉴와 연결된 버튼들의 Grouped프로퍼티를 True로 셋팅하자.
믿지 않겠지만... 이것으로 도킹되는 메뉴는 완성 되었다. (... 와~ 쉽다~)