2014-01-16 6 views
2

Я пытаюсь сделать, в Дельфах, что при нажатии на кнопку, я показываю раскрывающуюся панель с опциями, как это:Как это сделать?

Panel Desplegable

Кто-нибудь знает, как сделать этот эффект с VCL ? Теперь у меня есть форма с двумя панелями, главное всегда показывает и имеет боковую кнопку, и когда я нажимаю кнопку, отображается боковая панель, но я хотел бы сделать эффект. Спасибо

+0

Трудно знать, где начать. Вы на самом деле не имеете в виду vlc? Что у вас есть до сих пор? Каким образом вы застряли? –

+0

Я использую [AnimateWindow] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632669%28v=vs.85%29.aspx) команду WinAPI для этого при использовании форм VCL. Недостатком является то, что ваш пользовательский интерфейс заморожен на время анимации, поэтому лучше используйте его для короткой и быстрой анимации. [1]: «AnimateWindow» –

+0

VLC (клиент VideoLAN) или VCL (библиотека Visual Components для 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'. Таймер - это то, что вы хотите здесь. Видя, как «Сон» и «Процессы» рядом друг с другом дают мне крипы! –

3

вы можете использовать TJvRollOut из джедаев JVCL. Он действует как панель, которая разваливается и расширяется. Также вы можете посмотреть на Delphi: sliding (animated) panel и Hide, 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

Вы должны включить свойство «Double буферизации» формы приложения ... это должно предотвратить мигание ..

+0

Это не ответ. Это должен был быть комментарий к ответу @ elcharlie. –