在下面的链接中,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应该成为应用程序的一部分,所以我可以在delphi中这样做。
方法2:
使用代码调用此方法:
Windows.Graphics.Display.DisplayProperties.AutoRotationPreferences =
Windows.Graphics.Display.DisplayOrientations.Landscape;
要将其迁移到delphi,我需要知道API DLL信息,以便我可以做类似的事情。
有什么想法吗?
是否有一个COM对象或DLL可以让我们访问它?
答案 0 :(得分: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 。