2013-09-06 6 views
0

내 좋은 옛날 TMainMenuTActionMainMenuBar으로 바꾸 겠지만 문제가 있습니다.ActionMainMenuBar에서 기본 메뉴 (= 카테고리, TAction 하위 메뉴를 통해)에 OnClick 이벤트를 추가하는 방법은 무엇입니까?

현재 내 메인 메뉴 항목 인 'OnClick'처리기를 사용하고 있지만 TActionMainMenuBar과 동일한 동작을 재현 할 수있는 방법을 찾을 수 없습니다.

예를 들어 TAction "테스트"카테고리를 "샘플"로 만들고 이것을 TActionMainMenuBar에 드래그 앤 드롭합니다. 서브 메뉴 "Test"의 실행 핸들러에 TAction이 할당되었으므로 코드를 추가 할 수 있지만 "Category"/ TActionClientItem 중 하나이기 때문에 주 메뉴 항목 "Sample"에 이벤트 코드를 추가 할 수 없습니다. 이벤트가없는 "테스트".

이 액션을 TActionClientItem에 할당하려고 시도했지만 Delphi XE3에서 "속성을 설정할 수 없습니다 ..."라고 말하면서 클릭하면 "현재 프레임 워크에 구현되지 않은 작업 '없음'"이라는 메시지가 나타납니다. " .

또 다른 방법은, "샘플"및 "테스트"를 "(카테고리 없음)"이지만 "테스트"를 "샘플"의 하위 메뉴로 끌어다 놓을 수는 없습니다 전에 TActionMenuBar 빈 메뉴 메뉴 항목에는 하위 메뉴 항목이 아니라 주 메뉴 항목 만 드래그/드롭 할 수있는 것처럼 보입니다.

+0

StackOverflow에 오신 것을 환영합니다. 질문을 올바르게 형식화하고 거대한 텍스트 벽을 게시하는 대신 단락으로 나누십시오. 귀하의 질문을 읽을 수 없다면 대답하기가 어렵습니다. 게시물을 입력하는 동안 텍스트 영역 아래를보고 WYSIWYG 방식으로 실시간으로 글을 미리 볼 수 있으므로 게시 할 때 어떻게 보이는지 확인할 수 있습니다. 도움말 서식을 보려면 텍스트 영역의 오른쪽 위 모서리 위에있는 오렌지색 '?'단추를 클릭하십시오. 감사. –

답변

0

메인 메뉴 항목의 OnClick 처리기를 사용하는 목적은 대개 하위 메뉴 항목의 활성화/비활성화 또는 표시 여부를 결정하는 것입니다. 당신이/비활성화 동일한 기능을 수행하는 도구 모음 단추 같은 것들을 가능하게 곳은 또한 보통이다 :

procedure TForm1.MyMainMenuItemClick(Sender: TObject); 
begin 
    SomeMenuItem.Enabled := SomeConditionTest; 
    SomeToolButton.Enabled := SomeMenuItem.Enabled; 
    AnotherMenuItem.Enabled := AnotherConditionTest; 
    AnotherToolButton.Enabled := AnotherMenuItem.Enabled; 
end; 

TActionMainMenuBar에 대한 항목을,이는 OnUpdate 이벤트에 대신 개별 행동 않습니다. 이 기능은 작업을 활성화/비활성화 할 때 작업에 연결된 모든 컨트롤도 동시에 활성화/비활성화 할 수 있다는 이점이 있습니다. OnUpdate 이벤트가 자식 항목이 이전 주 메뉴 항목의 OnClick를 호출 할 것 같은 시간 인 표시되는 직전이라고

procedure TForm1.SomeActionUpdate(Sender: TObject); 
begin 
    SomeAction.Enabled := SomeConditionTest; // Also controls the toolbutton 
end; 

procedure TForm1.AnotherActionUpdate(Sender: TObject); 
begin 
    AnotherAction.Enabled := AnotherConditionTest; // Toolbutton too. 
end; 

.

+0

사실, OnClick 처리기를 사용하여 마킹 (하위) 메뉴 항목을 활성화하거나 확인하거나 동적 인 하위 메뉴를 즉석에서 작성합니다. 당신의 솔루션은 내가 원하는 것에 완벽하게 작동하지만 "오래된"OnClick 메서드의 장점은 특정 메뉴와 관련된 모든 것들이 모두 함께 그룹화된다는 사실입니다. – Gunter

+0

@Gunter :하지만 "새로운"Action 기능의 가장 큰 장점은 ** 액션 **에 연결된 모든 것들이 함께 그룹화된다는 것입니다. 메뉴 항목, 팝업 메뉴 항목, 툴 버튼 및 모든 기능을 제공하므로 별도로 업데이트 할 필요가 없습니다. 동작 자체 만 처리하면 다른 모든 항목이 동일한 값으로 자동 업데이트됩니다 *. 동작에 이미지를 지정하면 메뉴 항목과 툴바 버튼에 동일한 이미지가 나타납니다. 일단 익숙해지면 옛날 방식보다 훨씬 유용합니다. –

+0

@ken 오래된 주제이지만 그냥 같은 문제가 생겨서 끼어 들기 만하면됩니다. 액션에서 항상 이렇게 할 수는 없습니다. 예를 들어 편집 메뉴에는 표시되는 객체의 유형에 따라 항목을 잘라내거나 복사하거나 붙여 넣을 수 있습니다.텍스트 편집기 일 수도 있고, 차트 일 수도 있고, 도식 일 수도 있습니다. 따라서 onclick 이벤트는 어떤 유형의 창이 현재 활성 상태인지 확인하고 무언가가 선택되었는지 (복사 메뉴를 활성화하기 위해) 그 창을 조사하고 그 객체는 각 활성 창/객체 유형마다 다를 수 있습니다. 메뉴가 떨어지면 훨씬 쉽게 수행 할 수 있습니다. –