Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.05.2009, 11:43   #1
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию Работа с формами

Ребята подскажите плииззз как сделать плавное появление формы, выдвигание её с боку или там рассеивание если таковое возможно!!!
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума
Старый 20.05.2009, 13:13   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Функция AnimateWindow дает Вам возможность производить специальные эффекты при показе или сокрытии окон. Имеются четыре типа мультипликации: ролик, слайд, свертывание или развертывание и плавное альфа-перетекание.
Синтаксис

function AnimateWindow(hwnd: HWND, dwTime: DWord, dwFlags: DWord);

Параметры

* hwnd - Дескриптор окна, которое анимируется. Вызывающий поток должен владеть этим окном.
* dwTime - Устанавливает, сколько необходимо времени, чтобы воспроизвести мультипликацию, в миллисекундах. Как правило, воспроизведение мультипликации занимает 200 миллисекунд.
* dwFlags - Определяет тип мультипликации. Этот параметр может быть одно или несколько нижеследующих значений. Обратите внимание! что, по умолчанию, эти флажки дают желаемый результат при показе окна. Чтобы получать желаемый результат при сокрытии окна, используйте флажок AW_HIDE и логический оператор OR с соответствующими флажками.
o AW_SLIDE Использует слайдовую анимацию. По умолчанию используется анимационный ролик (прокрутка мультипликации). Этот флажок игнорируется тогда, когда пользуется с флажком AW_CENTER.
o AW_ACTIVATE Активизирует окно (при показе окна). Не используйте это значение совместно с AW_HIDE.
o AW_BLEND Использует эффект постепенного изменения прозрачности окна. Этот флажок может быть использован только в том случае, если параметр hwnd - окно верхнего уровня.
o AW_HIDE Скрывает окно. По умолчанию, окно показывается на экран.
o AW_CENTER Делает вид окна сжатым в точку, если используется флажок AW_HIDE или раскрытым из точки до полного размера, если флажок AW_HIDE не используется. Различные предписывающие флаги не имеют никакого действия.
o AW_HOR_POSITIVE Анимирует окно слева направо. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
o AW_HOR_NEGATIVE Анимирует окно справа налево. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
o AW_VER_POSITIVE Анимирует окно сверху вниз. Этот флажок может быть использованы с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
o AW_VER_NEGATIVE Анимирует окно снизу вверх. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - не ноль. Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Функция завершится ошибкой в нижеследующих ситуациях: Если окно использует регион окна. Windows XP: Это обстоятельство не заставляет функцию завершаться ошибкой. Если окно уже видимое, и Вы пробуете выводить на экран окно. Если окно уже скрытое, и Вы пробуете скрыть окно. Если нет заданного направления прокрутки для слайда или ролика. При попытке анимировать дочернее окно с флажком AW_BLEND. Если поток не владеет окном. Обратите внимание! что, в этом случае функция AnimateWindow завершается ошибкой, а GetLastError возвращает значение ERROR_SUCCESS. Чтобы получать расширенные данные об ошибках, вызовите функцию GetLastError.

Замечания

При использовании слайда или прокрутки мультипликации, Вы должны задать направление. Это может быть или AW_HOR_POSITIVE, AW_HOR_NEGATIVE, AW_VER_POSITIVE, или AW_VER_NEGATIVE. Вы можете комбинировать флажки AW_HOR_POSITIVE или AW_HOR_NEGATIVE с AW_VER_POSITIVE или AW_VER_NEGATIVE, чтобы анимировать окно по диагонали. Оконные процедуры для окна и его дочерних окон должны обрабатывать любое сообщение WM_PRINT или WM_PRINTCLIENT. Диалоговые окна, органы управления и стандартные органы управления уже обрабатывают WM_PRINTCLIENT. Заданная по умолчанию оконная процедура уже обрабатывает WM_PRINT. Если дочернее окно отображается частично отсеченным, когда оно анимируется, то будет иметь дырки, где оно отсечено. AnimateWindow поддерживает окна RTL. Избегайте анимировать окно, которое имеет тень, потому что оно производит видимое спонтанное дерганье мультипликации.

Вот примерчики:

procedure TForm1.FormShow(Sender: TObject);
begin
AnimateWindow(Handle, 500, AW_CENTER or AW_SLIDE);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AnimateWindow(handle, 500, AW_BLEND or AW_HIDE);
end;
FaTaL вне форума
Старый 20.05.2009, 14:25   #3
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию

спасибо огромное
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума
Старый 21.05.2009, 16:04   #4
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

А как задать чтобы начальное появление формы (начало анимации) происходило по центру экрана? При свойстве формы position:=poDesktopcenter анимация происходит в одной части экрана, а потом форма перескакивает в центр.
dimonbest вне форума
Старый 21.05.2009, 17:53   #5
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от dimonbest Посмотреть сообщение
А как задать чтобы начальное появление формы (начало анимации) происходило по центру экрана? При свойстве формы position:=poDesktopcenter анимация происходит в одной части экрана, а потом форма перескакивает в центр.
Можете сделать так:
Код:
Procedure TForm1.FormCreate(Sender: TObject);
Begin
Form1.Top:=Round((Screen.Height/2)-(Form1.Height/2));
Form1.Left:=Round((Screen.Width/2)-(Form1.Width/2));
AnimateWindow(Handle, 500, AW_CENTER Or AW_SLIDE);
End;
Всегда рад помочь!

Последний раз редактировалось Terran; 21.05.2009 в 18:40.
Terran вне форума
Старый 21.05.2009, 18:35   #6
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

Нет, так не работает...
dimonbest вне форума
Старый 21.05.2009, 18:41   #7
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от dimonbest Посмотреть сообщение
Нет, так не работает...
Прошу прощения, перепутал Top и Left местами. Я подправил код, теперь всё работает.
Всегда рад помочь!
Terran вне форума
Старый 21.05.2009, 23:26   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Может StretchDraw Вам поможет.Скорость изменения заставки меняется в Sleep/
Вложения
Тип файла: rar Заставка.rar (139.1 Кб, 24 просмотров)
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума
Старый 22.05.2009, 10:32   #9
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
Прошу прощения, перепутал Top и Left местами. Я подправил код, теперь всё работает.
Еще ворос: после анимации форма становится неактивной.
Как сделать так чтоб она стала активной? Попробывал так, не помогает...
Код:
procedure TForm1.FormShow(Sender: TObject);
begin
Form1.top:=Round((Screen.Height/2)-(Form1.Height/2));
Form1.left:=Round((Screen.Width/2)-(Form1.Width/2));
AnimateWindow(Handle, 900, AW_CENTER Or AW_SLIDE);
form1.Activate;
end;
dimonbest вне форума
Старый 22.05.2009, 14:57   #10
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Как сделать так чтоб она стала активной?
Код:
Form1.SetFocus;
Всегда рад помочь!
Terran вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с формами dscoma Microsoft Office Word 5 18.08.2010 14:09
Работа с формами S_Yevgeniy Помощь студентам 8 04.08.2009 10:23
Работа с формами ruslans Общие вопросы Delphi 1 16.04.2009 15:06
Работа с формами HAMMAN Общие вопросы Delphi 1 26.04.2007 01:18
Работа с формами dima00 Общие вопросы Delphi 4 11.04.2007 22:10