使用幻灯片切换进行表单显示

时间:2013-09-27 17:36:21

标签: ios forms delphi delphi-xe5

对于我的应用程序,当显示新表单时,我希望有一个转换幻灯片,当它们看起来有点类似于Tab项目如何与幻灯片转换一起出现 - 实际上,以相同的方式。

我无法找到有关具体问题的任何疑难解答或示例。我能想到的唯一工作就是对所有三种形式使用制表符控件并将它们放在制表符控件中。

我也尝试了Form.animateFloatWait()函数,就像通常对窗体上的控件一样,但无济于事。

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

2 个答案:

答案 0 :(得分:3)

使用RAD Studio XE5(Delphi或C ++ Builder),表格显示为全屏幕。

因此,如果我们需要通过幻灯片转换产生一些效果,我们需要使用TPanel来获得完美的性能:

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

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

  3. FormCreate方法:

    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手机。 并在第一个和第二个视图上设置一个按钮,以切换幻灯片动画(第一个面板上的按钮切换 要滑动到左侧的动画,再按第二个面板上的按钮切换动画以向右滑动。)

    让我们将第一个面板上的按钮命名为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;
    

    第二个面板的按钮名为“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方法, 小组幻灯片太棒了。

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

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

    我在XE5中以iOS或Android的方式进行了测试,并在任一平台上工作。与某人分享 所有人。

答案 1 :(得分:-1)

你可能只是尝试蛮力。 IE浏览器。一个for循环,用于调整面板大小,直到填满所需区域。 我没有使用过动画控件,但我在TMS软件(http://www.tmssoftware.com/site/advsmoothtilelist.asp)中使用了VCL控件。他们可能会有你可以使用的东西。