-
Я попробывал такой код, но он очень некоррекно разворачивает и сворачивет (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.
Всем спасибо!
-
> Timer1.Interval := 250 или 1000 - эффект все равно очень
> плохой зрительно
поменьше интервалы не пробовал?
-
Доброе утро! Пробовал. Хотелось бы подсказку как сделать этот алоритм через функции Win API. Спасибо всем. Есть еще мнения?
-
если мерцает, то попробуй Panel.DoubleBuffered = true
-
Спасибо, пробывал. Не в мерцании только дело. По аналогии, например с офисом 2007 хотелось бы. Еще раз спасибо всем за обсуждение. Может еще есть мнения или ссылки на конкретные примеры решений.
-
Может с помощью AnimateWindow ?
-
b z
А как это? можете привести пример? Спасибо
-
как то так:
AnimateWindow(Panel1.Handle, 300, AW_HIDE or AW_HOR_NEGATIVE);
ну и тут подбирайть параметры
-
только это в Buttom1Click надо делать а не в таймере. :)
-
b z
функция AnimateWindow(Panel1.Handle, 300, AW_HIDE or AW_HOR_NEGATIVE); рисует черную рамку без правой границы и все - никакого эффекта изменения высоты панели. Что здесь не так? Спасибо!
-
AnimateWindow(Panel1.Handle, 200, AW_VER_POSITIVE or AW_HOR_POSITIVE);
-
clickmaker
Спасибо за совет, но Ваш пример вообще не работает. Нет никаких "движений" вообще. Что здесь не так? Спасибо.
-
> Что здесь не так?
Тут не дебагер. Пора уже и в справку заглянуть.
А если эффект не тот, который ожидали, значит этот путь вам не подходит. :(
-
> [11] Dr.Andrew (10.04.08 11:05)
а Visible = false перед анимацией?
AnimateWindow - она же как ShowWindow, только плавно
-
clickmaker
AnimateWindow нарисовала черный прямоугольник на панели и все....
-
> [14] Dr.Andrew (10.04.08 11:39)
короче. Берешь панель, кладешь на форму. Высоту ставишь ту, которая должна быть ПОСЛЕ разворота. Visible = false
Потом (по нажатию кнопки) - AnimateWindow(Panel1.Handle, 200, AW_VER_POSITIVE);
Панель развернется сверху вниз.
-
Спасибо. Заработало. только панель окрашивается в черный цвет и обратно свернуть используя:
AnimateWindow(ElPageControl1.Handle, 200 или 0 (пробовал разные варианты), AW_VER_NEGATIVE);
не получается.
Спасибо
-
> только панель окрашивается в черный цвет
странно... может это из-за ХР
-
у меня виста и delphi 2007
-
> [18] Dr.Andrew (10.04.08 12:07)
> у меня виста и delphi 2007
а, ну тут я пас )