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 将变化减少到十分之一。
我是 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 将变化减少到十分之一。