5

对于我的应用程序,当显示新表单时,我希望有一个过渡幻灯片,当它们看起来有点类似于 Tab 项在幻灯片过渡中的显示方式时 - 嗯,实际上以相同的方式。

我找不到围绕特定问题的任何故障排除或示例。我能想到的唯一解决方法是对所有三种表单使用选项卡控件并将它们放在选项卡控件中。

我也尝试过Form.animateFloatWait()通常使用表单控件的功能,但无济于事。

如何让我的表单在视图中滑动?

4

2 回答 2

4

使用 RAD Studio XE5,无论是 Delphi 还是 C++ Builder,表格都是全屏显示的。

因此,如果我们需要通过幻灯片过渡来制作一些效果,我们需要使用 TPanel 以获得完美的性能:

  1. 添加一个 TPanel,将其设为全尺寸,并且不要使用 align 来执行此操作。我们需要在 FormCreate 方法中初始化 TPanel 的位置和大小。

  2. 为表单创建第二个 TPanel,而不是让第二个 TPanel 成为第一个 TPanel 的子级。初始化第二个 TPanel 的位置和大小,确保它位于屏幕的右侧。

表单创建方法:

procedure TFormMainView.FormCreate(Sender: TObject);
var
 newLocation : TPosition;
begin
  newLocation := self.btnLogin.Position;
  newLocation.X := screen.Size.Width - self.btnLogin.Width - 5;
  self.btnLogin.Position := newLocation;

  self.PanelMainView.Position.X := 0;
  self.PanelMainView.Position.Y := 0;
  self.PanelMainView.Width := screen.Size.Width;
  self.PanelMainView.Height := screen.Size.Height;

  self.PanelLogin.Position.X := screen.Size.Width;
  self.PanelLogin.Position.Y := 0;
  self.PanelLogin.Width := screen.Size.Width;
  self.PanelLogin.Height := screen.Size.Height;
end;

通过 Screen.Size,我们可以确保 TPanel 可以适应各种尺寸的设备,例如 Android 手机。并在第一个和第二个视图上设置一个按钮,切换幻灯片动画(第一个面板上的按钮切换动画向左滑动​​,第二个面板上的按钮切换动画向右滑动。)

我们把第一个Panel上的按钮命名为btnLogin,那么处理btnLoginClick事件的方法是: 注意:FloatAnimation1是第二个Panel,FloatAnimation2是第一个Panel,两个TFloatAnimation的“Property Name”都是“Position.X”,这将使动画在 X 轴上:

procedure TFormMainView.btnLoginClick(Sender: TObject);
begin
   self.FloatAnimation2.StartValue := 0;
   self.FloatAnimation2.StopValue := -1 * screen.Size.Width;

   self.FloatAnimation1.StartValue := screen.Size.Width;
   self.FloatAnimation1.StopValue := 0;

   self.FloatAnimation2.start;
   self.FloatAnimation1.Start;
end;

第二个面板的按钮名为“btnBacktoMainView”,事件处理程序为:

procedure TFormMainView.btnBackToMainScreenClick(Sender: TObject);
begin
   self.FloatAnimation1.StartValue := self.PanelLogin.Position.X;
   self.FloatAnimation1.StopValue := self.PanelLogin.Position.X + self.PanelLogin.Width;

   self.FloatAnimation2.StartValue := self.PanelMainView.Position.X;
   self.FloatAnimation2.StopValue := self.PanelMainView.Position.X + self.PanelMainView.Width;

   self.FloatAnimation1.Start;
   self.FloatAnimation2.Start;
end;

看?我们所做的就是设置动画对象的“statValue”、“StopValue”,并调用start方法,Panel的滑动效果非常棒。

也许这种方式不是进行视图转换的最佳方式,但它有效,并且表现完美。这10年来我在Win32应用程序中使用过类似的方式处理多个视图,效果不错。

唯一的区别是我必须使用 TTimer 和 Application.ProcessMessage 来确保 Win32 中的动画正常工作。(当然是表单项目)。

我在 XE5 中针对 iOS 或 Android 进行了这种测试,并且可以在任一平台上工作。与大家分享。

于 2013-10-02T15:27:03.393 回答
-1

你可以试试蛮力。IE。调整面板大小直到填满所需区域的 for 循环。我对动画控件的工作并不多,但我在 TMS 软件 ( http://www.tmssoftware.com/site/advsmoothtilelist.asp ) 中使用了 VCL 控件。他们可能有你可以使用的东西。

于 2013-09-28T04:25:59.260 回答