【问题标题】:How can I do This effect?我该怎么做这个效果?
【发布时间】:2014-02-05 06:50:45
【问题描述】:

我正在尝试在 delphi 中,当您按下按钮时,我会显示一个带有以下选项的下拉面板:

有人知道如何用 VCL 制作这种效果吗? 现在我有一个带有 2 个面板的表单,主面板始终显示并且有一个侧边按钮,当我按下按钮时,侧面板会显示,但我想制作效果。 谢谢

【问题讨论】:

  • 很难知道从哪里开始。你真的不是说vlc吗?到目前为止你有什么?你被什么困住了?
  • 在使用 VCL 表单时,我正在为此使用 AnimateWindow WinAPI 命令。缺点是您的 UI 在动画期间被冻结,因此最好将其用于短而快速的动画。 [1]:“动画窗口”
  • VLC(VideoLAN 客户端)或 VCL(Delphi 的可视化组件库)???也许他需要一个滑出面板+非矩形窗口(或两个窗口)。
  • “现在我有一个带有 2 个面板的表单,主面板始终显示并且有一个侧边按钮,当我按下按钮时,侧面板就会显示” - 所以面板被隐藏并显示按下按钮

标签: forms delphi panel vcl effect


【解决方案1】:

您应该在申请表中启用“双缓冲”属性...这应该可以防止闪烁...

【讨论】:

  • 这不是答案。应该是对@elcharlie 回答的评论。
【解决方案2】:

最后,我设法制作了效果。我放了一个面板,并添加了一张图片。然后我在按钮点击过程中使用了动画窗口。

procedure TFTelefonoSIP.Button1Click(Sender: TObject);
begin
  if  GDPanelLlamadasHidden = False then
  begin
    AnimateWindow(Panel1.Handle, 200, AW_SLIDE or AW_HOR_POSITIVE or AW_HIDE);
    GDPanelLlamadasHidden := True;
  end
  else
  begin
    AnimateWindow(Panel1.Handle, 200, AW_SLIDE or AW_HOR_NEGATIVE or AW_ACTIVATE);
    GDPanelLlamadasHidden := False;
  end;
end;

但是效果不是我想要的,有时候画面会闪现,不太美观。

【讨论】:

    【解决方案3】:

    我不了解您的应用程序的详细信息,包括透明度和其他内容。但是,我认为您必须自己在某种循环中为面板/窗口设置动画。我不知道有任何 VCL 功能。

    这是一个动画窗口的例子(虽然它又快又脏):

    代码:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      I, X: Integer;
    begin
      Form2.Width := 1;
      Form2.Height := Form1.Height;
      Form2.Left := Form1.Left + Form1.Width;
      Form2.Top := Form1.Top;
      Form2.Show;
    
      Timer1.Enabled := true;
    end;
    
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if I < 500 then
      begin
        I := I + 1;
        Form2.Width := I;
      end
      else
      begin
        Timer1.Enabled := false;
      end;
    end;
    

    并不完美,但希望足以给你一个想法。

    安迪

    【讨论】:

    • 我会重新考虑使用Application.ProcessMessages()。如果动画已经在进行中,用户再次点击 Button 会怎样?
    • 不要使用ProcessMessages。计时器是你想要的。看到Sleep 和ProcessMessages 并排在一起让我毛骨悚然!
    • 足够清楚如何使用 2 个面板来执行此操作。 DA 给出了符合 OP 愿望的答案。即使它按照要求使用 2 个表格而不是 2 个面板。似乎 SO 和 Delphi 变成了一种水晶魔法...... +1 DA 的回答和努力
    【解决方案4】:

    您可以使用 Jedi JVCL 的 TJvRollOut。 它就像一个折叠和展开的面板。您也可以查看Delphi: sliding (animated) panel 和 Hide, Slide And Fade Away Controls On A Delphi Form

    【讨论】:

    • 但他需要在表格之外
    • 从 OP 的问题中,我了解到他想要一个面板 - '现在我有一个带有 2 个面板的表单'
    • @Arioch'The - 根据接受的答案,这似乎是 OP 所要求的。动画 gif 和复制粘贴代码,这是正确的答案,所以 OP 从 VLC 获得了所需的结果(是的 vlc)。
    猜你喜欢
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多