Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизКак отключить эффект сворачивания окна? Найти похожие ветки
← →
Jiurasrasr (2004-08-31 17:41) [0]Есть mdi приложение.И есть некоторое количество Child окон.
Есть кнопки Вперед,Назад, которые переключают Child окна попрядку.А именно одно из окон child становиться wsMaximized а то которое было на весь экран, становиться wsNormal.Проблема в том что раскрытие окна идет не мгновенно.Т.е. видно как сворачивается одно окно, и как потом разворачивается другое, что неудобно, вернее некрасиво.Я хотел бы чтобы сворачивание и разворачиваниен проводилось безо всяких визуальных эффектов, т.е. наиболее быстро. Как это можно сделать?
← →
Synochka (2004-08-31 19:31) [1]А зачем ты их именно так переключаешь? Есть же Next.....
← →
Almaz © (2004-08-31 22:57) [2]Отключить эффект сворачивания окна только в своем приложении нельзя, его можно отключить только во всей системе. Сделать это можно так:
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);
Удачи.
← →
MIm1 © (2004-09-01 08:51) [3]Странно, я кажется писал
LockWindowUpdate(application.mainform.handle);
childform.style:= wsmaximized;
LockWindowUpdate(0);
← →
Almaz © (2004-09-01 23:47) [4]
> MIm1 © (01.09.04 08:51) [3]
> Странно, я кажется писал
>
> LockWindowUpdate(application.mainform.handle);
> childform.style:= wsmaximized;
> LockWindowUpdate(0);
Функция LockWindowUpdate запрещает пересовку клиентской части окна, анимации окон она не запретит.
← →
Mim1 © (2004-09-02 00:55) [5]
> [4] Almaz © (01.09.04 23:47)
:)
Странно, по моему результат налицо, и имхо это более красивый метод чем [2].
← →
Экспериментатор (2004-09-02 06:58) [6]Между прочим именно так
как написал
Almaz © (31.08.04 22:57) [2]
и делает Борланд
Изучайте исходники
← →
Mim1 © (2004-09-02 11:36) [7]
> [6] Экспериментатор (02.09.04 06:58)
> и делает Борланд
Между прочим я это знаю, и тем не менее... см.[5]
← →
Almaz © (2004-09-03 23:01) [8]
> :)
> Странно, по моему результат налицо, и имхо это более красивый
> метод чем [2].
Ну свой метод я никому не навязываю :) Просто я только что еще раз проверил ваш способ в своей программе, в которой я столкнулся в свое время с аналогичной проблемой, т.к. он мне тоже по компактности нравится намного больше, но он не работает у меня Win2000SP4 professional.
Такжен, согласно MSDN функция LockWindowUpdate не влияет на анимацию окон.
Удачи.
← →
Mim1 © (2004-09-04 06:48) [9]Ну что начнем холивар? Раунд первый. Телепузики круче покемонов! :)
← →
GrayFace © (2004-09-05 09:04) [10]А если не сворачивать-разворачивать, а просто прятать? Или прятать, потом сворачивать-разворачивать, а потом показывать?
← →
@BraIN © (2004-09-05 09:16) [11]2 GrayFace © (05.09.04 09:04) [10]
Не поможет, все равно анимация будет.
← →
Lenor © (2004-09-06 02:10) [12]а как-то же сделано сворачивание всех окон без анимации при нажатии на ярлычок "свернуть все окна", который на панели задач слева :) Или это не то?..
← →
DVM © (2004-09-06 21:49) [13]
> а как-то же сделано сворачивание всех окон без анимации
> при нажатии на ярлычок "свернуть все окна", который на панели
> задач слева :) Или это не то?..
А они не сворачиваются вообще. Desktop двигается наверх.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c