Главная страница
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.009 c
15-1308860995
Юрий
2011-06-24 00:29
2011.10.23
С днем рождения ! 24 июня 2011 пятница


1-1263286244
sann-x
2010-01-12 11:50
2011.10.23
Установка ActiveX компонента


2-1309595561
FolderS
2011-07-02 12:32
2011.10.23
Indy Socket error #0 при post запросе


4-1251445961
Interesting
2009-08-28 11:52
2011.10.23
Озвучить текст с помощью Microsoft Agent


15-1308905141
SQLEXPRESS
2011-06-24 12:45
2011.10.23
А Зотова хочется отдельной строкой поздравить все же.