![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Какое сообщение Win при восстановлении формы
POP © (2010-03-25 13:44:00)Минимизацию в ТаскБар ловлю так:
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.
Не прилетают они почему-то.
Anatoly Podgoretsky (2010-03-26 07:24:00) [1]> POP (25.03.2010 23:38:05) [5]
А чего бы этому ловиться, когда нет ни какого сворачивание/разворачивания
POP (2010-03-25 23:38:00) [2]Проблема почти решена.
Самым простым способом оказалось поставить свои обработчики на Application.onRestore и Application.onMinimize, в FormCreate.
Тогда ловятся как системное меню, так и ТаскБар, и никакие сообщения обрабатывать не нужно.
TApplicationEvents - лишняя бандура в проекте.
Не ловится только сворачивание/разворачивание всех окон по хоткею Win+D.
Но я пока с этим не разбирался, надо пошерстить интернет.
Игорь Шевченко (2010-03-25 22:39:00) [3]
> Это роли не играет особой
Правильно говоришь, не играет. Потому что команда SC_RESTORE посылается не окну твоей формы, а Application.Handle.
Ловить через ApplicationEvents.OnRestore
POP (2010-03-25 20:51:00) [4]Точно, если свернуть форму ткнув на иконку в ТаскБаре, то SC_MINIMIZE не прилетит.
SC_MINIMIZE прилетает только когда свертываешь через системное меню.
Вот засада.
То есть, если тыкать на Таскбаре для свертывания/развертывания формы нужно что-то другое отслеживать.
POP (2010-03-25 20:48:00) [5]
> Игорь Шевченко ©
> 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 тут надо работать, ведь она только к системному меню относиться вообще?
Игорь Шевченко (2010-03-25 13:59:00) [6]Msg.CmdType and $FFF0