![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отключить эффект сворачивания окна?
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);, где PrevAniStatus - это глобальная переменная, в которой будет храниться включена или выключена была анимация до активации вашенго приложения.
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;
2. В обработчике Application.OnDeactivate возвращать то состояние анимации, которое было до активации вашей программы:
AniInfo.iMinAnimate := PrevAniSatus;
SystemParametersInfo(SPI_SETANIMATION, SizeOf(AniInfo), @AniInfo, 0);
Удачи.
Synochka (2004-08-31 19:31:00) [13]А зачем ты их именно так переключаешь? Есть же Next.....