2014-10-11 4 views
2

메뉴 모음 단추로 FMX 양식을 최소화 한 다음 작업 표시 줄 아이콘을 클릭하여 복원하면 양식이 포 그라운드로 되돌려 지지만 창은 활성화되지 않습니다. 양식은 작업 표시 줄에 창을 "축소"하는 애니메이션을 적용하는 대신 "직접"최소화됩니다. OnActivate 폼은 발생하지 않습니다.FMX 양식을 올바르게 복원하는 방법은 무엇입니까?

이상하게도 WindowProc을 패치하고 비활성화시 SW_RESTORE를 사용하여 ShowWindow를 호출하면 작업 표시 줄 아이콘을 클릭 한 후 양식이 올바르게 복원됩니다. 이유가 확실하지 않습니다. 최소화 애니메이션은 여전히 ​​해고되지 않습니다.

procedure TForm1.WindowProc(var Msg: TMessage); 
begin 
    case Msg.Msg of 
    WM_ACTIVATE: if (Msg.WParamLo = WA_INACTIVE) then ShowWindow(WindowHandleToPlatform(Handle).Wnd, SW_RESTORE); 
    end; 
    Msg.Result := CallWindowProc(OrgWndProc, WindowHandleToPlatform(Handle).Wnd, Msg.Msg, Msg.WParam, Msg.LParam); 
end; 
나는이 나에게 명백한 버그처럼 보인다 윈도우 8에 빈 FMX HD 양식이 동작을 관찰 할 수

, 그것을 해결하기 위해 더 나은 방법이?

+0

FMX의 버전은 무엇입니까? – rhody

+0

그것이 의미하는 바라면 XE5 업데이트 2입니다. FMX의 고유 한 버전 관리에 대해 알지 못합니다. – DNR

+0

동의, 그게 무슨 뜻인지. – rhody

답변

1

나는이 문제를 FMX.Platform.Win.pas 파일을 수정하여 해결했다고 생각합니다. TPlatformWin.CreateAppHandle 방법 당신은 그 줄을 주석 (또는 제거)해야합니다

FApplicationHWND := CreateWindowEx(WS_EX_WINDOWEDGE or WS_EX_APPWINDOW, FMAppClass.lpszClassName, 
    PChar(LApplicationTitle), WS_POPUP or WS_GROUP, 0, 0, 0, 0, GetDesktopWindow, 0, HInstance, nil); 
Winapi.Windows.ShowWindow(FApplicationHWND, SW_SHOWNORMAL); 

내가 그 솔루션은 엠바 카데로 토론 포럼에서 나온 생각합니다. 메시지는 사라졌지 만 다시 돌아올 경우를 대비하여 어쨌든 링크를 제공합니다. https://forums.codegear.com/thread.jspa?messageID=556541&#556541

+0

바탕 화면을 소유자로 설정하지 마십시오. 대신 0을 전달하십시오. http://blogs.msdn.com/b/oldnewthing/archive/2004/02/24/79212.aspx –

+1

@DavidHeffernan 누군가가 엠바 카데로에게 그 정보를 알려줘야한다고 생각합니다;) – DNR