gpt4 book ai didi

delphi - 如何防止平板电脑屏幕自动旋转?

转载 作者:行者123 更新时间:2023-12-03 15:10:16 25 4
gpt4 key购买 nike

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

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

发生的情况是delphi 的(XE3) TRibbon 不能很好地处理旋转。它往往会被挂起。

正如所料,MS 网站描述了如何通过 MS 开发产品执行此操作。我不知道如何在我的 Delphi 项目中做到这一点。

方法一:

将其添加到您的 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 可以让我们访问它?

最佳答案

这些调用是为了禁用 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 或 TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED);

另一个不好的选项是对整个平板电脑禁用它。只需转到注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation 并将 Enable 更改为 0

关于delphi - 如何防止平板电脑屏幕自动旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16093502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com