2014-01-16 158 views
2

我试图做的,在Delphi中,当你按下一个按钮,我显示一个下拉面板,这样的选择:我该怎么办这个效果?

Panel Desplegable

有谁知道如何使VCL这种效果? 现在我有一个2面板的形式,主要总是显示并有一个侧面按钮,当我按下按钮的侧面板显示,但我想做的效果。 谢谢

+0

很难知道从哪里开始。你真的不是指vlc吗?你到目前为止有什么?你以什么方式卡住? –

+0

我使用[AnimateWindow](http://msdn.microsoft.com/en-us/library/windows/desktop/ms632669%28v=vs.85%29.aspx)使用VCL表单时的WinAPI命令。缺点是你的用户界面在动画的时候被冻结,所以最好用它来做短暂和快速的动画。 [1]: “AnimateWindow” –

+0

VLC(VideoLAN的客户端)或VCL(可视化组件库为Delphi)???也许他需要一个滑出式面板+非矩形窗口(或两个窗口)。 –

回答

7

我不知道具体的应用程序,具有透明度和其他东西。不过,我认为你必须通过自己的某种循环来对你的面板/窗口进行动画处理。我不知道任何VCL功能。

这里是一个动画的窗口下(它的快速和肮脏虽然)为例:

enter image description here

代码:

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; 

并不完美,但希望不够好,给你一个想法。

安迪

+0

I' d使用Application.ProcessMessages()重新考虑。如果用户在动画已经在进行中时再次点击按钮会怎么样? –

+1

Application.ProcessMessages - 不建议这么做... – RBA

+4

不要使用ProcessMessages。计时器就是你想要的。看到彼此相邻的'Sleep'和'ProcessMessages'让我感到毛骨悚然! –

3

可以使用TJvRollOut从绝地JVCL。它的行为就像一个可以让人喜欢和扩大的面板。你也可以看看Delphi: sliding (animated) panelHide, Slide And Fade Away Controls On A Delphi Form

+1

的答案和努力,但他需要的形式之外 –

+0

从OP的问题我明白,他希望用一个面板 - '现在我有一个2格的表格' – RBA

+0

@ Arioch'The - 基于公认的答案,似乎是OP所要求的。一个动画gif和一个复制粘贴代码,这是正确的答案,所以OP得到了VLC所需的结果(是vlc)。 – RBA

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; 

但效果不是我想要的,有时图像显示闪光,不是很美观。

enter image description here

0

,你应该能够在申请表的“双缓冲”财产......这应该防止闪烁..

+0

这不是一个答案。它应该是对@ elcharlie的回答的评论。 –