![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать плавно сворачивающийся и раскрывающийся контрол? [D7, WinXP]
Dr.Andrew © (2008-04-10 00:21:00)Я попробывал такой код, но он очень некоррекно разворачивает и сворачивет (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.
Всем спасибо!
Игорь Шевченко (2008-04-10 21:14:00) [1]clickmaker © (10.04.08 12:30) [19]
> а, ну тут я пас )
Они наворовали, а мы мучайся :)
NaRuTo (2008-04-10 20:38:00) [2]Может выучишь DirectX
clickmaker (2008-04-10 12:30:00) [3]
> [18] Dr.Andrew (10.04.08 12:07)
> у меня виста и delphi 2007
а, ну тут я пас )
Dr.Andrew (2008-04-10 12:07:00) [4]у меня виста и delphi 2007
clickmaker (2008-04-10 12:06:00) [5]
> только панель окрашивается в черный цвет
странно... может это из-за ХР
Dr.Andrew (2008-04-10 12:01:00) [6]Спасибо. Заработало. только панель окрашивается в черный цвет и обратно свернуть используя:
AnimateWindow(ElPageControl1.Handle, 200 или 0 (пробовал разные варианты), AW_VER_NEGATIVE);
не получается.
Спасибо
clickmaker (2008-04-10 11:46:00) [7]
> [14] Dr.Andrew (10.04.08 11:39)
короче. Берешь панель, кладешь на форму. Высоту ставишь ту, которая должна быть ПОСЛЕ разворота. Visible = false
Потом (по нажатию кнопки) - AnimateWindow(Panel1.Handle, 200, AW_VER_POSITIVE);
Панель развернется сверху вниз.
Dr.Andrew (2008-04-10 11:39:00) [8]clickmaker
AnimateWindow нарисовала черный прямоугольник на панели и все....
clickmaker (2008-04-10 11:33:00) [9]
> [11] Dr.Andrew (10.04.08 11:05)
а Visible = false перед анимацией?
AnimateWindow - она же как ShowWindow, только плавно
b z (2008-04-10 11:11:00) [10]
> Что здесь не так?
Тут не дебагер. Пора уже и в справку заглянуть.
А если эффект не тот, который ожидали, значит этот путь вам не подходит. :(
Dr.Andrew (2008-04-10 11:05:00) [11]clickmaker
Спасибо за совет, но Ваш пример вообще не работает. Нет никаких "движений" вообще. Что здесь не так? Спасибо.
clickmaker (2008-04-10 11:02:00) [12]AnimateWindow(Panel1.Handle, 200, AW_VER_POSITIVE or AW_HOR_POSITIVE);
Dr.Andrew (2008-04-10 10:49:00) [13]b z
функция AnimateWindow(Panel1.Handle, 300, AW_HIDE or AW_HOR_NEGATIVE); рисует черную рамку без правой границы и все - никакого эффекта изменения высоты панели. Что здесь не так? Спасибо!
b z (2008-04-10 10:45:00) [14]только это в Buttom1Click надо делать а не в таймере. :)
b z (2008-04-10 10:40:00) [15]как то так:
AnimateWindow(Panel1.Handle, 300, AW_HIDE or AW_HOR_NEGATIVE);
ну и тут подбирайть параметры
Dr.Andrew (2008-04-10 10:33:00) [16]b z
А как это? можете привести пример? Спасибо
b z (2008-04-10 10:20:00) [17]Может с помощью AnimateWindow ?
Dr.Andrew (2008-04-10 10:05:00) [18]Спасибо, пробывал. Не в мерцании только дело. По аналогии, например с офисом 2007 хотелось бы. Еще раз спасибо всем за обсуждение. Может еще есть мнения или ссылки на конкретные примеры решений.
clickmaker (2008-04-10 09:27:00) [19]если мерцает, то попробуй Panel.DoubleBuffered = true
Dr.Andrew (2008-04-10 08:34:00) [20]Доброе утро! Пробовал. Хотелось бы подсказку как сделать этот алоритм через функции Win API. Спасибо всем. Есть еще мнения?