2009-05-05 5 views
2

고유 한 바로 가기가있는 작업 영역의 하위 메뉴가있는 응용 프로그램이 있습니다. 지금까지는이 서브 메뉴가 정적이지만 종종 메뉴에 새 위치를 추가하고 새 바로 가기를 지정해야합니다. 이 응용 프로그램에는 버튼, 메뉴 및 내가 언급 한 하위 메뉴에 필요한 작업을 보유하는 TActionManager가 포함 된 Unit Clientdata가 있습니다.Delphi의 동적 메뉴/동작

그래서이 하위 메뉴를 런타임에 변경 가능하게하고 싶습니다. 모든 작업 공간은 데이터베이스에 지속됩니다. 하위 메뉴에는 여전히 actionmanager에서 작업이 있어야한다고 생각합니다.

게다가 모든 작업에 대한 바로 가기 편집기가 있으므로 각 사용자는 자신의 개인 바로 가기를 가질 수 있습니다. 이러한 바로 가기는 개인 파일 디렉토리의 텍스트 파일에 저장됩니다.

변경해야 할 곳이 3 곳 있습니다.

  • 시스템 모듈. 여기서 하위 메뉴에있는 데이터베이스에서 작업 영역을 추가, 편집 및 삭제할 수 있습니다.
  • Actionmanager. 하위 메뉴에 대한 모든 작업을 보유합니다. 또한 단축키를 포함하고 텍스트 파일에서 바로 가기를로드/저장할 수 있습니다.
  • 계획 모듈. 장소에 대한 하위 메뉴를 사용합니다. 데이터베이스의 위치에서 서브 메뉴를 빌드하고 오른쪽 단축키를 지정해야합니다.

나는 구현을 시작했지만 올바른 방향에 있는지 확실하지 않습니다. 작업 공간 목록이 데이터 모듈에서 편집 될 때 ActionManager의 데이터가 동기화되는 것이 중요합니다. 런타임에 ActionManager에서 삭제 작업을 추가, 편집하는 방법을 모르겠습니다. 나는 단지 이것을 지시문에서만했다.

기타 의견 및 가능한 개선을 환영합니다!

감사합니다.

답변

3

런타임에 동작을 추가하거나 제거하는 것은 약간 뒤로입니다. 새 TContainedAction을 만든 다음 ActionList 속성을 목록에 설정합니다. 목록에서 제거하려면 ActionList : = nil을 설정하거나 .Free 조치를 취하십시오.

모든 것이 작업이 아니라 목록에서 완료되었습니다. 목록의 Actions 속성을 사용하여 목록에서 작업을 가져 오거나 for..in 루프를 지원하는 Delphi 버전을 사용하는 경우 목록을 열거 할 수 있습니다.

actnlist.pas의 소스를 조사하여 자세한 정보를 얻을 수 있습니다. 그렇게 크고 편협하지는 않습니다. D2009 버전의 경우에만 1162 라인.

관련 문제