Конференция "Основная" » Как создать плавно сворачивающийся и раскрывающийся контрол? [D7, WinXP]
 
  • Dr.Andrew (10.04.08 00:21) [0]
    Я попробывал такой код, но он очень некоррекно разворачивает и сворачивет (Panel1.Height = 127, при создании формы устанавливаю Timer1.Enabled := False; Timer1.Interval := 250 или 1000 - эффект все равно очень плохой зрительно!):

    procedure TForm1.Buttom1Click(Sender: TObject);
    begin
    Timer1.Enabled := True;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if Button1.ImageIndex = 7 then
    begin
    Panel1.Height := Panel1.Height + 5;
    if Panel1.Height > 127 then
    Timer1.Enabled := False;
    end
    else
    begin
    Panel1.Height := Panel1.Height - 5;
    if Panel1.Height < 1 then
    Timer1.Enabled := False;
    end;
    end;

    Подскажите, пожалуйста, лучшее решение может через WinAPI.
    Всем спасибо!
  • Loginov Dmitry © (10.04.08 07:59) [1]
    > Timer1.Interval := 250 или 1000 - эффект все равно очень
    > плохой зрительно


    поменьше интервалы не пробовал?
  • Dr.Andrew (10.04.08 08:34) [2]
    Доброе утро! Пробовал. Хотелось бы подсказку как сделать этот алоритм через функции Win API. Спасибо всем. Есть еще мнения?
  • clickmaker © (10.04.08 09:27) [3]
    если мерцает, то попробуй Panel.DoubleBuffered = true
  • Dr.Andrew (10.04.08 10:05) [4]
    Спасибо, пробывал. Не в мерцании только дело. По аналогии, например с офисом 2007 хотелось бы. Еще раз спасибо всем за обсуждение. Может еще есть мнения или ссылки на конкретные примеры решений.
  • b z (10.04.08 10:20) [5]
    Может с помощью AnimateWindow ?
  • Dr.Andrew (10.04.08 10:33) [6]
    b z
    А как это? можете привести пример? Спасибо
  • b z (10.04.08 10:40) [7]
    как то так:
    AnimateWindow(Panel1.Handle, 300, AW_HIDE or AW_HOR_NEGATIVE);
    ну и тут подбирайть параметры
  • b z (10.04.08 10:45) [8]
    только это в Buttom1Click надо делать а не в таймере. :)
  • Dr.Andrew (10.04.08 10:49) [9]
    b z
    функция AnimateWindow(Panel1.Handle, 300, AW_HIDE or AW_HOR_NEGATIVE); рисует черную рамку без правой границы и все - никакого эффекта изменения высоты панели. Что здесь не так? Спасибо!
  • clickmaker © (10.04.08 11:02) [10]
    AnimateWindow(Panel1.Handle, 200, AW_VER_POSITIVE or AW_HOR_POSITIVE);
  • Dr.Andrew (10.04.08 11:05) [11]
    clickmaker
    Спасибо за совет, но Ваш пример вообще не работает. Нет никаких "движений" вообще. Что здесь не так? Спасибо.
  • b z (10.04.08 11:11) [12]

    > Что здесь не так?

    Тут не дебагер. Пора уже и в справку заглянуть.
    А если эффект не тот, который ожидали, значит этот путь вам не подходит. :(
  • clickmaker © (10.04.08 11:33) [13]

    > [11] Dr.Andrew   (10.04.08 11:05)

    а Visible = false перед анимацией?
    AnimateWindow - она же как ShowWindow, только плавно
  • Dr.Andrew (10.04.08 11:39) [14]
    clickmaker
    AnimateWindow нарисовала черный прямоугольник на панели и все....
  • clickmaker © (10.04.08 11:46) [15]

    > [14] Dr.Andrew   (10.04.08 11:39)

    короче. Берешь панель, кладешь на форму. Высоту ставишь ту, которая должна быть ПОСЛЕ разворота. Visible = false
    Потом (по нажатию кнопки) - AnimateWindow(Panel1.Handle, 200, AW_VER_POSITIVE);
    Панель развернется сверху вниз.
  • Dr.Andrew (10.04.08 12:01) [16]
    Спасибо. Заработало. только панель окрашивается в черный цвет и обратно свернуть используя:
    AnimateWindow(ElPageControl1.Handle, 200 или 0 (пробовал разные варианты), AW_VER_NEGATIVE);
    не получается.
    Спасибо
  • clickmaker © (10.04.08 12:06) [17]

    > только панель окрашивается в черный цвет

    странно... может это из-за ХР
  • Dr.Andrew (10.04.08 12:07) [18]
    у меня виста и delphi 2007
  • clickmaker © (10.04.08 12:30) [19]

    > [18] Dr.Andrew   (10.04.08 12:07)
    > у меня виста и delphi 2007

    а, ну тут я пас )
  • NaRuTo © (10.04.08 20:38) [20]
    Может выучишь DirectX
  • Игорь Шевченко © (10.04.08 21:14) [21]
    clickmaker ©   (10.04.08 12:30) [19]


    > а, ну тут я пас )


    Они наворовали, а мы мучайся :)
 
Конференция "Основная" » Как создать плавно сворачивающийся и раскрывающийся контрол? [D7, WinXP]
Есть новые Нет новых   [134487   +52][b:0][p:0.001]