Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.23;
Скачать: CL | DM;

Вниз

Какое сообщение Win при восстановлении формы   Найти похожие ветки 

 
POP   (2010-03-25 13:44) [0]

Минимизацию в ТаскБар ловлю так:


private
   procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
..
..
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
inherited;
if Msg.CmdType = SC_MINIMIZE then
...
end;


Далее, делаю то что мне нужно.

А вот как поймать обратное действие восстановление из ТаскБара?

Пробовал отслеживать известные сообщения SC_RESTORE, SC_MAXIMIZE.

Не прилетают они почему-то.


 
Игорь Шевченко ©   (2010-03-25 13:59) [1]

Msg.CmdType and $FFF0


 
POP   (2010-03-25 20:48) [2]


> Игорь Шевченко ©



> Msg.CmdType and $FFF0


Это роли не играет особой, в Delphi я без "and $FFF0" делал для SC_MINIMIZE и все работает.

Провел эксперимент, включил для формы свойство biMaximize, чтобы можно было ее на весь экрна разворачивать и начал ловить мессаги, которыве летят:

1) При сворачивании в ТаскБар прилетает SC_MINIMIZE
2) При разворачивании несвернутого в ТаскБар приложения кнопкой развернуть из меню, придетает SC_MAXIMIZE
3) При свертывании развернутого на весь экран формы, прилетает SC_RESTORE

Все.

Непонятно, что летит к форме, когда ее из ТаскБар восстанавливают. SC_RESTORE и SC_MAXIMIZE точно не летят.

Нужно как-то туда свой обработчик воткнуть.

Может вообще не с WM_SYSCOMMAND тут надо работать, ведь она только к системному меню относиться вообще?


 
POP   (2010-03-25 20:51) [3]

Точно, если свернуть форму ткнув на иконку в ТаскБаре, то SC_MINIMIZE не прилетит.

SC_MINIMIZE прилетает только когда свертываешь через системное меню.

Вот засада.

То есть, если тыкать на Таскбаре для свертывания/развертывания формы нужно что-то другое отслеживать.


 
Игорь Шевченко ©   (2010-03-25 22:39) [4]


> Это роли не играет особой


Правильно говоришь, не играет. Потому что команда SC_RESTORE посылается не окну твоей формы, а Application.Handle.
Ловить через ApplicationEvents.OnRestore


 
POP   (2010-03-25 23:38) [5]

Проблема почти решена.

Самым простым способом оказалось поставить свои обработчики на Application.onRestore и Application.onMinimize, в FormCreate.

Тогда ловятся как системное меню, так и ТаскБар, и никакие сообщения обрабатывать не нужно.

TApplicationEvents - лишняя бандура в проекте.

Не ловится только сворачивание/разворачивание всех окон по хоткею Win+D.

Но я пока с этим не разбирался, надо пошерстить интернет.


 
Anatoly Podgoretsky ©   (2010-03-26 07:24) [6]

> POP  (25.03.2010 23:38:05)  [5]

А чего бы этому ловиться, когда нет ни какого сворачивание/разворачивания



Страницы: 1 вся ветка

Текущий архив: 2011.10.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
11-1238511900
DmitryS
2009-03-31 19:05
2011.10.23
непонятная ошибка с MainMenu


2-1309848279
Criptonik
2011-07-05 10:44
2011.10.23
colorDialog


15-1309081495
trololo
2011-06-26 13:44
2011.10.23
Как сделать чтобы при WM_PAINT нарисованное оставалось на форме


15-1308947395
Юрий
2011-06-25 00:29
2011.10.23
С днем рождения ! 25 июня 2011 суббота


15-1308850266
Arnolg Mazutneger
2011-06-23 21:31
2011.10.23
внешний HDD греется/не греется