2013-04-18 4 views
5

В приведенной ниже ссылке Microsoft описывает два способа ограничить вращение экрана приложения на планшете.Как предотвратить автоматический поворот экрана на планшет?

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

, что происходит в том, что Дельфы (XE3) TRibbon не обрабатывает вращения хорошо. он имеет тенденцию повесить.

Как и следовало ожидать, на веб-сайте MS описывается, как это сделать из продуктов разработки MS. Я не вижу, как я могу это сделать в своем проекте Delphi.

Метод 1:

добавить это к вашему appxmanifest файл:

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

Я еще не нашел, где/как appxmanifest должна быть частью приложения, так что я могу сделать это в Дельфы.

Метод 2:

называют это с кодом:

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

перенести это в Дельфы, я должен был бы знать информацию DLL API, так что я мог бы сделать что-то подобное.

Любые идеи?

Может ли быть COM-объект или DLL, который дает нам доступ к этому?

+0

Хотя я очень сомневаюсь, я все еще жду дня, когда Delphi достаточно признана для Microsoft, чтобы предоставить примеры кода, как и их другие основные языки. –

+0

Можете ли вы прояснить, хотите ли вы применить это приложение специально для Windows 8 или нет? AFAIK, это применимо к Windows 7+, но я предполагаю, что это может быть от XP + –

+0

Я только ожидал, что он будет работать с win8. благодаря! jim mckeeth дал решение ниже. –

ответ

6

Эти вызовы должны отключить поворот для приложения WindowsRT (FKA Metro), которое вы не можете создать с помощью Delphi (пока). Даже приложение Metropolis по-прежнему является настольным приложением. Существует solution on the Intel site.

На основе обратной связи от X-Ray я вымыл код:

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. 

Вы хотите, чтобы убедиться, что вы только назвать это на Windows 8, так как эта процедура не существует в другом месте.

Использование: TMetroDisplayRotation.SetDisplayAutoRotationPreferences(TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE or TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED);

Другой BAD вариант, чтобы отключить его для всего планшета. Просто перейдите по HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation в реестр и изменить Enable на .

+0

СПАСИБО, Джим! Придется добавить stdcall, а затем он сработает. Также сделал несколько других незначительных улучшений. Протестировав его тщательно и учитывая, что вы не можете его протестировать, я счел правильным изменить ваш комментарий, чтобы включить это изменение. Спасибо за то, что вы делаете для сообщества Delphi! –

+0

@ X-Ray: Не стесняйтесь редактировать мой код. Да, я полностью отстранил StdCall. –

+0

Джим: мои изменения не видны.stackoverflow сказал, что изменения должны быть «проверены экспертами», и до тех пор я мог видеть изменения. теперь даже я не вижу своих изменений, поэтому казалось, что этого не произошло. благодаря! mp –