FMX HD 应用程序放大和缩小如何实现?

How implement FMX HD app zoom-in and zoom-out?

我是 FireMonkey 的新手。最近在用Delphi(FMX)开发一个2D小游戏,想在鼠标滚轮的时候加上ZOOM-in/out的效果,试了一下,搜索了Idera示例和FMX代码, 没有收获。 那么,有什么方法可以实现ZOOM吗?为什么 FMX 不提供易于使用的“比例”属性? FMX 对用户不友好,并且非常缺乏成熟的产品、示例代码和讨论。 非常感谢,请原谅我的英语不好。

简单点:

File-->New-->Multi-Device Application-->Blank Application,点击确定,然后我们应该得到一个FMX HD App,我想做的是,当我转动鼠标时,主窗体的视口可以zoom-in/out。

    procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; var Handled: Boolean);
    begin
      // ?
    end;

抱歉我的描述不当,谢谢!

在表格中放置一个TScaledLayout(以下命名为ScaledLayout1),并将Align 属性设置为Client。此外,设置 HitTest = True 以在布局上的任何位置接收鼠标事件。然后将所有其他控件放置在此布局上。

ScaledLayout1 布局创建一个 OnMouseWheel() 事件(以下命名为 ScaledLayout1MouseWheel)。

在表单上声明私有字段

private
  StoredWheelDelta: extended;

这是累积滚动量所必需的。

然后为OnMouseWheel()事件编写代码:

procedure TForm12.ScaledLayout1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; var Handled: Boolean);
begin
  StoredWheelDelta := StoredWheelDelta + WheelDelta; // accumulate wheeldelta's

  ScaledLayout1.Scale.X := (1 + StoredWheelDelta / 120 / 10);
  ScaledLayout1.Scale.Y := (1 + StoredWheelDelta / 120 / 10);
end;

值120和10只是为了将变化缩放到一个合理的值。 120 与 WheelDelta 的典型值相同,10 将变化减少到十分之一。