android - 如何使用 FireMonkey for Delphi XE5 检测/处理屏幕旋转

标签 android delphi firemonkey delphi-xe5 firemonkey-fm3

首先 - 我是 Android 和 FireMonkey 编程的初学者,所以请记住这一点:-)。

我制作了一个 FireMonkey/Android 应用程序,它可以根据屏幕大小和方向调整/重排其控件,但我不知道如何设置我的应用程序以便在用户旋转屏幕时调用。如果我在其中运行 Firemonkey/Win32 并显示执行以下操作的按钮:

PROCEDURE TMainForm.FlipForm;
  VAR
    W,H : INTEGER;

  BEGIN
    W:=Width; H:=Height; Width:=H; Height:=W
  END;

然后捕获 FormResize 事件,我的表单按应有的方式调整大小/重排。我想在 Android 上运行时做同样的事情,但是当屏幕旋转时似乎没有调用 FormResize 事件,所以我的按钮等没有回流并最终在屏幕外。

所以我的问题是,如何检测屏幕是否已旋转,以便我的应用程序可以在横向和纵向模式下工作?

最佳答案

如果您无法使表单的 OnResize 事件起作用,那么您可以订阅 FMX 方向已更改的消息:

uses
  FMX.Forms, FMX.Messages, FMX.Types;

//In the definition of TFooForm you define:
FOrientationChangedId: Integer;
procedure OrientationChangedHandler(const Sender: TObject; const Msg: TMessage);

//Subscribe to orientation change events in OnCreate or similar
FOrientationChangedId := TMessageManager.DefaultManager.SubscribeToMessage(
  TOrientationChangedMessage, OrientationChangedHandler);

//Unsubscribe from orientation change events in OnDestroy or similar
TMessageManager.DefaultManager.Unsubscribe(
  TOrientationChangedMessage, FOrientationChangedId);

procedure TFooForm.OrientationChangedHandler(const Sender: TObject; const Msg: TMessage);
begin
  Log.d('Orientation has changed');
end;

关于android - 如何使用 FireMonkey for Delphi XE5 检测/处理屏幕旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20862569/

相关文章:

android - 将架构信息从 gradlew 命令传递到 cmake

.net - Delphi Prism中是否有lock()语句?

sqlite - Delphi - 如何将位图保存到 SQLite 数据库中的 BLOB 字段

android - 更新Android SDK后的构建问题

javascript - 有没有办法在 webview 中拦截 javascript 触发的 URL?

delphi - Delphi 中的动态菜单/操作

德尔福。如何使用 TreeView 移动框架?

delphi - 如何在Delphi XE2/Firemonkey中获取ChromiumEmbedded浏览器的屏幕截图?

ios - Firemonkey,位置传感器在 iOS 后台工作

c# - 电子邮件查看器应用程序