본문 바로가기
Borland

ActionToolBar에서 버튼 추가는 어떻게 하나요?

by leo21c 2007. 11. 29.
SMALL

작성자 : 박지훈.임프 (cbuilder) 읽음 : 153 2007-07-12 오후 10:06:25

ActionToolBar는 액션 계열의 컴포넌트로, 일반 툴바와는 사용법이 많이 다릅니다. 반드시 액션매니저(ActionManager)와 연동해서 사용해야 합니다. 다음과 같이 해보세요.

일단 ActionToolBar가 없는 상태에서, 폼에 액션매니저를 올려놓습니다. 그리고 더블클릭합니다. 다이얼로그가 하나 나타나는데, 여러 페이지가 있는 것이 보일 것입니다. 첫번째 페이지인 Toolbars 페이지를 선택합니다. 페이지 안에 있는 New 버튼을 클릭합니다. 그러면 폼의 상단에 액션툴바가 하나 추가됩니다. 한번 클릭할 때마다 액션툴바가 하나씩 생성될 겁니다.

다음으로, 같은 다이얼로그의 두번째 페이지, Actions를 선택합니다. 페이지 안 상단 오른쪽에 작은 버튼들이 보일 겁니다. 첫번째 버튼이 New Action 버튼입니다. 이 버튼을 한번 클릭할 때마다 페이지 안쪽의 리스트박스에 Action1, Action2, 이렇게 액션 컴포넌트들이 생성됩니다. 지금까지 폼에 생성된 액션툴바에는 아무것도 없습니다.

다음으로, 리스트박스에 생성된 액션 컴포넌트들을 드래그해서 폼에 있는 액션툴바에 드롭합니다. 버튼이 하나 생길 겁니다. 액션매니저와 액션툴바의 사용방법은 이런 식입니다.

하지만 이렇게 해서 그냥 컴파일하고 실행해도, 툴바의 모든 버튼들은 비활성화되어 있을 겁니다. 액션에 이벤트를 하나도 주지 않아서 그렇습니다. 각 액션에는 기본적으로 두가지 이벤트 핸들러를 할당해줘야 하는데, 그건 OnExecute와 OnUpdate입니다.

OnExecute 이벤트는 해당 액션이 연결된 버튼 등을 클릭했을 때 발생하는 이벤트입니다. OnUpdate는 애플리케이션이 남는 시간(idle time)에 액션 컴포넌트들의 상태를 다시 판단하는데, 그런 시점마다 발생하는 이벤트입니다. 일단 툴바에 추가되어 있는 액션을 다이얼로그에서 선택한 후 그 액션의 OnUpdate 이벤트 핸들러를 만들어보세요. 그리고 다음과 같이 간단히 코딩합니다.

procedure TForm1.Action1Update(Sender: TObject);
begin
Action1.Enabled := true;
end;

이제 실행해보면, 이 이벤트 핸들러가 연결된 액션의 버튼이 활성화되어 나타날 겁니다.

액션 계열의 모든 컴포넌트들은 이렇게 액션 컴포넌트를 중심으로 사용합니다. 꽤 복잡하게 느껴질 수도 있겠습니다만,
메뉴항목, 툴바 버튼 등등 하나의 동작에 여러개의 컴포넌트들이 연결되어 있고, 게다가 그런 동작들이 대단히 많을 경우 전체 UI의 설계 구조를 통일성있고 체계적으로 개발할 수 있게 됩니다.

메뉴가 기껏해야 서너개 안쪽인 단순한 UI라면 별 의미가 없지만, 보통 복잡한 애플리케이션(예를 들면 상용 텍스트 에디터같은)의 경우 액션이 수십개에서 수백개, 많으면 수천개가 될 수도 있고, 그 액션들중 사용자의 선택에 따라 툴바에
추가하는 기능도 필요하기 때문에 이런 액션 구조가 대단히 효율적이 됩니다.



LIST