2013-02-27 10 views
2

와 컨텍스트를 해결하기 열리지 않습니다 그리고 F1이 바로 가기 인 메뉴 항목을 사용하여 도움말 파일을 적절한 컨텍스트로 엽니 다. 메뉴 항목 코드를 호출하는 버튼도 있습니다. 도움말 파일 나는 <kbd>F1</kbd>을 치는 것은 적절한 상황에 도움말 파일을 열 수없는 도움말 컨텍스트에 도움말 파일을 열 수 있다는 것을 발견 또한 델파이 XE2 델파이 6</p> <p>을 사용하여 F1 키

은 확실 모두 F1 및 메뉴 항목 및 버튼 코드의 동일한 라인을 호출하게 확인하고는 다음과 같습니다

procedure TForm1.Help1Click(Sender: TObject); 
begin 
    Application.HelpContext(Self.HelpContext); 
end; 

Self.HelpContext 값이 사용자의 위치에 따라 변경된다 양식과 나는 그 라인이 실행될 때 Self.HelpContext이 올바른 값이고 F1 또는 메뉴 항목이나 버튼을 통해 호출 할 때와 동일한 값이라는 것을 확인했습니다.

나는 내가 여기에 누락 간단한 뭔가가 있어야이 문제는

델파이 6에 기록 된 우리의 응용 프로그램의 모든 이전 버전에 존재 확인. 어떤 아이디어?

답변

2

은 시스템에서 특별한 대우를받습니다. 예, F1의 바로 가기가있는 메뉴 항목의 핸들러가 실행되는 것은 사실입니다. 하지만 해당 처리기가 실행 된 후 앱에 WM_HELP 메시지가 전송됩니다.

WM_HELP 메시지는 처음에 TCustomForm.WMHelp으로 처리됩니다. 그러면 활성 컨트롤과 관련된 도움말 컨텍스트 ID가 조회됩니다. 그런 다음 해당 도움말 컨텍스트를 사용하여 Application.HelpContext이 호출됩니다. 아마도 액티브 컨트롤의 도움말 컨텍스트 ID는 폼의 컨텍스트 ID와 다릅니다.

따라서 메뉴 항목이 원하는 항목에서 도움말 파일을 열어도 후속 WM_HELP이 메뉴 항목보다 우선합니다.

F1이 항상 양식의 도움말 컨텍스트 ID로 라우팅되기를 원하는 것으로 보입니다. 이 경우 내 조언은 다음과 같습니다 :

  • 양식에 HelpContext을 설정하십시오.
  • 양식의 다른 모든 컨트롤에 대해 모두 HelpContext 속성을 제거하십시오. 즉, 기본값 인 0으로 되돌립니다.

그런 다음 WM_HELP 메시지가 처리되면 활성 제어에서 시작되어 0의 도움말 컨텍스트를 찾습니다. 그런 다음 부모를 통해 0이 아닌 형식으로 올라갑니다.

메뉴 항목/동작에서 F1 바로 가기를 제거한다고 생각합니다. 그리고 WM_HELP 메시지가 도움말을 호출하는 메커니즘이되게하십시오.

+0

좋은 캐치! WM_HELP 핸들러도 도움이 될 것입니다 .. –

+0

@Sertac Thanks. 아마 라운드를 돌리고 메뉴에서 F1 처리를 중단 할 것입니다. /액션 그리고 WM_HELP로 굴려 라. –

+0

@DavidHeffernan -이 도움말과 마지막 도움말 파일 문제에 대한 귀하의 도움에 정말 감사드립니다. 테스트 도움말 파일이있는 테스트 앱이 작동하는 것 같습니다. 내 거대한 응용 프로그램과 테스트 도움말 파일로 테스트도 작동합니다! 내 거대한 앱과 거대한 도움말 파일 사이에 뭔가가 만족스럽지 않은 것 같습니다. 단축키에서 F1을 제거해도 영향을 미치지 않는 것으로 보입니다. 비록 그것이 나의 특정한 문제를 해결하지 못한다고해도 나는 당신이 도왔 기 때문에 당신의 대답을 받아 들일 것입니다. –