2013-04-18 43 views
5

Trong liên kết bên dưới, Microsoft mô tả hai cách để giới hạn xoay vòng màn hình ứng dụng trên máy tính bảng.Làm cách nào để ngăn màn hình tự động xoay trên máy tính bảng?

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

những gì đang xảy ra là delphi của (XE3) TRibbon không xử lý luân chuyển tốt. nó có xu hướng bị treo.

như mong đợi, trang web MS mô tả cách thực hiện điều này từ các sản phẩm phát triển MS. Tôi không thấy làm thế nào tôi có thể làm điều này trong dự án Delphi của tôi.

Phương pháp 1:

thêm video này vào tập tin appxmanifest của bạn:

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

Tôi vẫn chưa tìm thấy nơi/cách appxmanifest nên là một phần của ứng dụng để tôi có thể làm điều này trong delphi.

Cách 2:

cuộc gọi này với mã:

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

để di chuyển này để delphi, tôi cần phải biết thông tin DLL API để tôi có thể làm điều gì đó tương tự.

Bất kỳ ý tưởng nào?

Có thể có đối tượng COM hoặc DLL cung cấp cho chúng tôi quyền truy cập này không?

+0

Mặc dù rất nghi ngờ, tôi vẫn đang chờ ngày Delphi được công nhận đủ để Microsoft cung cấp các ví dụ mã giống như các ngôn ngữ chính khác của họ. –

+0

Bạn có thể làm rõ liệu bạn có muốn áp dụng riêng cho Windows 8 hay không? AFAIK, Nó có thể áp dụng cho Windows 7+, nhưng tôi cho rằng nó có thể là từ XP + –

+0

Tôi chỉ mong đợi nó hoạt động với win8. cảm ơn! jim mckeeth đã đưa ra một giải pháp dưới đây. –

Trả lời

6

Các cuộc gọi đó là tắt tính năng xoay vòng cho ứng dụng WindowsRT (FKA Metro) mà bạn không thể xây dựng với Delphi (chưa). Ngay cả ứng dụng Metropolis vẫn là ứng dụng dành cho máy tính để bàn. Có một số solution on the Intel site.

Dựa trên phản hồi từ X-Ray tôi dọn dẹp mã:

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ạn sẽ muốn chắc chắn rằng bạn chỉ gọi này trên Windows 8 kể từ khi thủ tục đó không tồn tại ở nơi khác.

Cách sử dụng: TMetroDisplayRotation.SetDisplayAutoRotationPreferences(TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE or TMetroDisplayRotation.ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED);

Một tùy chọn BAD là để vô hiệu hóa nó cho toàn bộ máy tính bảng. Chỉ cần truy cập HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AutoRotation trong sổ đăng ký và thay đổi Enable thành .

+0

CẢM ƠN, Jim! Đã phải thêm stdcall và sau đó nó làm việc. Cũng đã thực hiện một vài cải tiến nhỏ khác. Đã kiểm tra kỹ lưỡng và xem xét rằng bạn không thể kiểm tra nó, tôi cảm thấy nó đã đúng để chỉnh sửa bình luận của bạn để bao gồm sự thay đổi này. Cảm ơn bạn vì những gì bạn làm cho cộng đồng Delphi! –

+0

@ X-Ray: Vui lòng chỉnh sửa mã của tôi. Yeah, tôi hoàn toàn cách nhau StdCall. –

+0

Jim: thay đổi của tôi không hiển thị.stackoverflow cho biết những thay đổi sẽ cần phải được "peer xem xét" và cho đến khi đó chỉ có tôi mới có thể nhìn thấy những thay đổi. bây giờ thậm chí tôi không thấy những thay đổi của tôi để nó sẽ xuất hiện mà không bao giờ xảy ra. cảm ơn! mp –

Các vấn đề liên quan