Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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);
 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);


Удачи.


 
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
1-1096276131
Sphinx
2004-09-27 13:08
2004.10.10
BITMAP in TStream


1-1096146359
VAmpiro$
2004-09-26 01:05
2004.10.10
n:= sin(x) - програмно узнать значение x


4-1093845468
Роман Снегирев
2004-08-30 09:57
2004.10.10
MMF


14-1095832509
Mrd
2004-09-22 09:55
2004.10.10
Исходник браузера


3-1094727068
Still Swamp
2004-09-09 14:51
2004.10.10
ADO + MSSQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский