Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Какое сообщение 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо