使用幻灯片切换制作表格节目

Thi*_*Guy 5 forms delphi ios delphi-xe5

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

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

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

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

Den*_*ang 4

使用 RAD Studio XE5(Delphi 或 C++ Builder),表单可以全屏显示。

因此,如果我们需要做一些幻灯片切换的效果,就需要使用TPanel来达到完美的表现:

  1. 添加一个 TPanel,将其设置为全尺寸,并且不要使用对齐来执行此操作。我们需要在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;
Run Code Online (Sandbox Code Playgroud)

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

我们将第一个面板上的按钮命名为 btnLogin,因此处理 btnLoginClick 事件的方法是: 注意:FloatAnimation1 用于第二个面板,FloatAnimation2 用于第一个面板,两个 TFloatAnimation 的“属性名称”都是“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;
Run Code Online (Sandbox Code Playgroud)

第二个面板的按钮名为“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;
Run Code Online (Sandbox Code Playgroud)

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

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

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

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