5

在下面的链接中,Microsoft 描述了限制平板电脑上应用程序屏幕旋转的两种方法。

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

发生的事情是德尔福的(XE3)TRIbbon 不能很好地处理旋转。它往往会挂起。

正如预期的那样,MS 网站描述了如何从 MS 开发产品中做到这一点。我看不到如何在我的 Delphi 项目中做到这一点。

方法一:

将此添加到您的 appxmanifest 文件中:

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

我还没有找到appxmanifest应该在哪里/如何成为应用程序的一部分,所以我可以在delphi中做到这一点。

方法二:

用代码调用它:

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

要将其迁移到 delphi,我需要知道 API DLL 信息,以便我可以做类似的事情。

有任何想法吗?

是否有一个 COM 对象或 DLL 可以让我们访问它?

4

1 回答 1

6

这些调用将禁用 WindowsRT 应用程序 (FKA Metro) 的旋转,而您无法使用 Delphi 构建(目前)。即使是 Metropolis 应用程序仍然是桌面应用程序。英特尔网站上有一个解决方案。

根据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);

另一个不好的选择是为整个平板电脑禁用它。只需进入HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation注册表并更改Enable0

于 2013-04-18T22:18:10.273 回答