2013-04-18 20 views
5

W poniższym łączu firma Microsoft opisuje dwa sposoby ograniczenia obrotu ekranu aplikacji na tablecie.Jak zapobiec automatycznemu obracaniu ekranu na tablecie?

http://msdn.microsoft.com/en-ca/library/windows/apps/hh700342.aspx

co się dzieje jest to, że Delphi (XE3) TRibbon nie obsługuje obrót dobrze. zazwyczaj się zawiesza.

zgodnie z oczekiwaniami strona internetowa MS opisuje, jak to zrobić z produktów MS Development. Nie widzę, jak mogę to zrobić w moim projekcie Delphi.

Metoda 1:

dodać do swojej appxmanifest pliku:

<InitialRotationPreference> 
    <Rotation Preference="landscape"/> 
    <Rotation Preference="landscapeFlipped"/> 
</InitialRotationPreference> 

ja jeszcze nie znalazłem gdzie/jak appxmanifest powinny być częścią aplikacji, więc mogę to zrobić w delphi.

Metoda 2:

nazywają to z kodem:

Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences = 
      Windows.Graphics.Display.DisplayOrientations.Landscape; 

przenieść to do Delphi, to muszę wiedzieć, informacje API DLL więc mogłem zrobić coś podobnego.

Wszelkie pomysły?

Czy może istnieć obiekt COM lub biblioteka DLL, która daje nam do tego dostęp?

+0

Chociaż bardzo wątpliwe, wciąż czekam na dzień, w którym Delphi jest wystarczająco rozpoznawany, aby Microsoft mógł dostarczać przykłady kodu, podobnie jak inne języki podstawowe. –

+0

Czy możesz wyjaśnić, czy chcesz, aby dotyczyło to konkretnie systemu Windows 8, czy nie? AFAIK, dotyczy systemu Windows 7+, ale zakładam, że może pochodzić z XP + –

+0

. Spodziewałem się tylko, że będzie działać z win8. dzięki! jim mckeeth podał rozwiązanie poniżej. –

Odpowiedz

6

Te połączenia mają na celu wyłączenie obrócenia dla aplikacji WindowsRT (FKA Metro), której nie można zbudować za pomocą Delphi (jeszcze). Nawet aplikacja Metropolis to wciąż aplikacja komputerowa. Istnieje solution on the Intel site.

oparciu o informacje zwrotne od X-Ray ja oczyścić kod:

unit MetroDisplayRotation; 

(* 
* Usage: TMetroDisplayRotation.SetDisplayAutoRotationPreferences(
*   TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE or 
*   TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED); 
*) 

interface 

type 
    TMetroDisplayRotation = class 
    public const 
    ORIENTATION_PREFERENCE_NONE = $0; 
    ORIENTATION_PREFERENCE_LANDSCAPE = $1; 
    ORIENTATION_PREFERENCE_PORTRAIT = $2; 
    ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED = $4; 
    ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED = $8; 

    class procedure SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE: Integer); 
    end; 

implementation 

uses 
    SysUtils, Windows; 

{ TMetroDisplayRotation } 

class procedure TMetroDisplayRotation.SetDisplayAutoRotationPreferences(
    ORIENTATION_PREFERENCE: Integer); 
type 
    TSDARP = procedure(ORIENTATION_PREFERENCE: Integer); stdcall; 
var 
    UserHandle: THandle; 
    SDARP: TSDARP; 
begin 
    UserHandle := GetModuleHandle('User32.dll'); 
    @SDARP := GetProcAddress(UserHandle, 'SetDisplayAutoRotationPreferences'); 
    if Assigned(SDARP) then 
    SDARP(ORIENTATION_PREFERENCE); 
end; 

end. 

Będziemy chcieli, aby upewnić się, że to tylko zadzwonić na Windows 8 ponieważ procedura nie istnieje gdzie indziej.

Zastosowanie: TMetroDisplayRotation.SetDisplayAutoRotationPreferences(TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE or TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED);

Inną opcją BAD jest wyłączenie go dla całej tabletki. Po prostu przejdź do rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation i zmień Enable na .

+0

DZIĘKUJĘ, Jim! Musiał dodać stdcall, a następnie zadziałało. Wprowadzono również kilka innych drobnych usprawnień. Po dokładnym przetestowaniu go i stwierdzeniu, że nie możesz go przetestować, uznałem, że należy edytować komentarz, aby uwzględnić tę zmianę. Dziękuję za to, co robisz dla społeczności Delphi! –

+0

@ X-Ray: Zapraszam do edycji mojego kodu. Tak, całkowicie rozstawiłem StdCall. –

+0

Jim: moje zmiany nie są widoczne.stackoverflow powiedział, że zmiany będą musiały być "recenzowane" i do tej pory tylko ja mogłem zobaczyć zmiany. teraz nawet nie widzę swoich zmian, więc wydaje się, że nigdy się nie wydarzyło. dzięki! mp –