Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отключить эффект сворачивания окна?


Jiurasrasr ©   (2004-08-31 17:41:00) 

Есть mdi приложение.И есть некоторое количество Child окон.
Есть кнопки Вперед,Назад, которые переключают Child окна попрядку.А именно одно из окон child становиться wsMaximized а то которое было на весь экран, становиться wsNormal.Проблема в том что раскрытие окна идет не мгновенно.Т.е. видно как сворачивается одно окно, и как потом разворачивается другое, что неудобно, вернее некрасиво.Я хотел бы чтобы сворачивание и разворачиваниен проводилось безо всяких визуальных эффектов, т.е. наиболее быстро. Как это можно сделать?


DVM   (2004-09-06 21:49:00) [1]


> а как-то же сделано сворачивание всех окон без анимации
> при нажатии на ярлычок "свернуть все окна", который на панели
> задач слева :) Или это не то?..

А они не сворачиваются вообще. Desktop двигается наверх.


Lenor   (2004-09-06 02:10:00) [2]

а как-то же сделано сворачивание всех окон без анимации при нажатии на ярлычок "свернуть все окна", который на панели задач слева :) Или это не то?..


@BraIN   (2004-09-05 09:16:00) [3]

2 GrayFace ©   (05.09.04 09:04) [10]

Не поможет, все равно анимация будет.


GrayFace   (2004-09-05 09:04:00) [4]

А если не сворачивать-разворачивать, а просто прятать? Или прятать, потом сворачивать-разворачивать, а потом показывать?


Mim1   (2004-09-04 06:48:00) [5]

Ну что начнем холивар? Раунд первый. Телепузики круче покемонов! :)


Almaz   (2004-09-03 23:01:00) [6]


> :)
> Странно, по моему результат налицо, и имхо это более красивый
> метод чем [2].

Ну свой метод я никому не навязываю :) Просто я только что еще раз проверил ваш способ в своей программе, в которой я столкнулся в свое время с аналогичной проблемой, т.к. он мне тоже по компактности нравится намного больше, но он не работает у меня Win2000SP4 professional.
Такжен, согласно MSDN функция LockWindowUpdate не влияет на анимацию окон.

Удачи.


Mim1   (2004-09-02 11:36:00) [7]


> [6] Экспериментатор   (02.09.04 06:58)


> и делает Борланд

Между прочим я это знаю, и тем не менее... см.[5]


Экспериментатор   (2004-09-02 06:58:00) [8]

Между прочим именно так
как написал
Almaz ©   (31.08.04 22:57) [2]
и делает Борланд
Изучайте исходники


Mim1   (2004-09-02 00:55:00) [9]


> [4] Almaz ©   (01.09.04 23:47)


:)
Странно, по моему результат налицо, и имхо это более красивый метод чем [2].


Almaz   (2004-09-01 23:47:00) [10]


> MIm1 ©   (01.09.04 08:51) [3]
> Странно, я кажется писал
>
> LockWindowUpdate(application.mainform.handle);
> childform.style:= wsmaximized;
> LockWindowUpdate(0);

Функция LockWindowUpdate запрещает пересовку клиентской части окна, анимации окон она не запретит.


MIm1   (2004-09-01 08:51:00) [11]

Странно, я кажется писал

LockWindowUpdate(application.mainform.handle);
childform.style:= wsmaximized;
LockWindowUpdate(0);


Almaz   (2004-08-31 22:57:00) [12]

Отключить эффект сворачивания окна только в своем приложении нельзя, его можно отключить только во всей системе. Сделать это можно так:

var
 AniInfo : TAnimationInfo;
...
 AniInfo.cbSize := SizeOf(TAnimationInfo);
 AniInfo.iMinAnimate := 0;
 SystemParametersInfo(SPI_SETANIMATION, SizeOf(AniInfo), @AniInfo, 0);


Этот код выключит анимацию сворачивания/разворачивания окна во всей системе, но с моей точки зрения программа влияющая на всю систему без ведома пользователя - это плохой тон. Поэтому рекомендую вам сделать следующее:
1. В обработчике Application.OnActivate выполнять следующий код:

 AniInfo.cbSize := SizeOf(TAnimationInfo);
 SystemParametersInfo(SPI_GETANIMATION, SizeOf(AniInfo), @AniInfo, 0);
 PrevAniStatus := AniInfo.iMinAnimate;
 if AniInfo.iMinAnimate <> 0 then
 begin
   AniInfo.iMinAnimate := 0;
   SystemParametersInfo(SPI_SETANIMATION, SizeOf(AniInfo), @AniInfo, 0);
 end;
, где PrevAniStatus - это глобальная переменная, в которой будет храниться включена или выключена была анимация до активации вашенго приложения.

2. В обработчике Application.OnDeactivate возвращать то состояние анимации, которое было до активации вашей программы:

 AniInfo.iMinAnimate := PrevAniSatus;
 SystemParametersInfo(SPI_SETANIMATION, SizeOf(AniInfo), @AniInfo, 0);


Удачи.


Synochka   (2004-08-31 19:31:00) [13]

А зачем ты их именно так переключаешь? Есть же Next.....


Наверх

Титульная страница Поиск, карта сайта Написать письмо