2016-10-12 2 views
4

우리는 Delphi 2007 응용 프로그램을 보유하고 있으며 최근 Windows Aero의 향상된 지원을 위해 MainFormOnTaskBar를 활성화했습니다. 그러나 클릭 할 때 기본 폼이 모든 자식 폼의 맨 위에 오지 않기 때문에 다음 코드를 추가했습니다. 이러한Delphi Application Main form 일시적으로 앞쪽으로 튀기기

procedure TBaseForm.CreateParams(var Params: TCreateParams); 
begin 
    inherited CreateParams(Params); 

    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; 
    Params.WndParent := 0; 
end; 

한 부작용 자식 폼에 Alt 키를 + 핫키를 누르면 다시 그 특정 단축키를 전면에 기본 폼 제스처를 처리하고 있지 않는 점이다. 핫키가 처리되면 핫키가 삼켜 졌기 때문에이 동작이 발생하지 않습니다.

다른 누구도이 동작을 경험 했습니까? 해결 방법을 조언 할 수 있습니다. 또 다른 형태가 활성화되어있는 경우에도 메인 폼의 메뉴에서 메뉴 항목을 선택할 수 있도록

감사

+0

'MainFormOnTaskbar'가 true 일 때처럼'CreateParams()'를 오버라이드 할 필요가 없습니다. 기본 구현은 이미 동일한 값을 설정합니다. 'MainForm'을 클릭하면 클릭 할 때 맨 위로 가져와야합니다. 이는 정상적인 윈도우 동작입니다. –

+1

@Remy - MainFormOnTaskbar가 true 일 때 모든 보조 양식은 기본 양식에 의해 소유됩니다. 이는 주 양식이 2 차 양식 앞에 오지 못하게합니다. –

+0

다른 문제도 발생할 가능성이 큽니다. 하나는 [여기] (http://qc.embarcadero.com/wc/qcmain.aspx?d=49410) 해결 방법 섹션에서 언급했다. 아마 다른 사람들도 ... –

답변

5

관찰 된 동작은 기본 폼에 수 주 메뉴 VCL의 가속기 지원의 결과이다.

"응용 프로그램이"하면 "WinControl"(이차 형태) 명령 형식의 WM_SYSCOMMAND 핸들러로부터 전송되는 CM_APPSYSCOMMAND 메시지를 처리하는 동안 기본 형태의 활성화가 기본 형태의 핸들에 SetFocus 호출 발생

SC_KEYMENU (창 메뉴 활성화 - Alt 키).

이 동작은 MainFormOnTaskBar을 사용하고 CreateParams을 재정 의하여 앞쪽으로 가져올 수있는 양식을 갖는 부작용이 아닙니다. MainFormOnTaskBar 설정에 관계없이 같은 문제가 발생합니다. 유일한 차이점은 활성화 된 주 폼이 설정되면 보조 폼 앞에 올 수 없지만 주 폼이 모두 활성화된다는 것입니다.

보조 양식의 WM_SYSKEYDOWN 처리기 또는 보조 양식의 OnKeyDown과 같은 여러 위치에서 동작을 가로 채서 수정할 수 있습니다. 의미 상 더 정확한 재정의 IMO는 보조 양식 IsShortCut에서 수행해야합니다. 보조 양식이 키 조합을 처리 할 때 시스템 키 처리가 종료됩니다. 당신은 다음 양식에 키를 요구하는 VCL을 알 수 있습니다 : 당신이 미세 조정 할 수 물론

type 
    TSecondaryForm = class(TForm) 
    .. 
    public 
    function IsShortCut(var Message: TWMKey): Boolean; override; 

... 

function TSecondaryForm.IsShortCut(var Message: TWMKey): Boolean; 
begin 
    Result := True; 
end; 

조건부 매개 변수에 따라 true를 반환 할 수 있습니다.

관련 문제