![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить сообщение о восстановлении/разворачивании окна? [D7, WinXP]
rolex © (2005-01-18 18:44:00)К примеру мне нужно, чтобы когда пользователь восстановит окно произошла комманда beep.
rolex (2005-01-18 21:53:00) [1]Товарищи! Спасибо вам всем огромное! Помогли мне сильно!
olookin (2005-01-18 20:39:00) [2][9] Юрий Зотов © (18.01.05 20:37)
Ага, теперь все ясно...
Юрий Зотов (2005-01-18 20:37:00) [3]> olookin © (18.01.05 20:32) [8]
> the four low-order bits of the uCmdType parameter are used
> internally by Windows.
А уж как она там их использует - это только ей известно. Иногда они и так нулевые, а иногда нет.
olookin (2005-01-18 20:32:00) [4][7] Юрий Зотов © (18.01.05 20:27)
А, все стало ясно. Неясно лишь то, что при SC_RESTORE условие все же выполняется. А разве SC_RESTORE не есть такой же параметр для WM_SYSCOMMAND, как и SC_MAXIMIZE?
Юрий Зотов (2005-01-18 20:27:00) [5]> olookin © (18.01.05 20:17) [6]
if (Msg.message = WM_SYSCOMMAND) and
(Msg.wParam and $FFF0= SC_MAXIMIZE) then ...
Из хелпа:
In WM_SYSCOMMAND messages, the four low-order bits of the uCmdType parameter are used internally by Windows. To obtain the correct result when testing the value of uCmdType, an application must combine the value 0xFFF0 with the uCmdType value by using the bitwise AND operator.
olookin (2005-01-18 20:17:00) [6][3] Юрий Зотов © (18.01.05 20:11)
Аналогичен ли Вашему этот код?
type
TForm1 = class(TForm)
...
end;
procedure MyMessage(var Msg: TMsg; var Handled: Boolean);
procedure TForm1.Create(ender: TObject);
begin
Application.OnMessage:=MyMessage;
end;
procedure MyMessage(var Msg: TMsg; var Handled: Boolean);
begin
if (Msg.message=WM_SYSCOMMAND) and
(Msg.wParam=SC_MAXIMIZE) then MessageBeep(0);
end;
Похоже, что нет. С парамтером SC_RESTORE этот пример работает, а с параметром SC_MAXIMIZE вроде бы нет. Интересно узнать Ваше мнение.
begin...end (2005-01-18 20:14:00) [7]> [3] Юрий Зотов © (18.01.05 20:11)
Ой, не видел Вашего ответа, когда писал свой.
begin...end (2005-01-18 20:13:00) [8]> [2] rolex (18.01.05 20:01)
Восстановление:
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
public
{ Public declarations }
end;
...
procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
if Message.CmdType and $FFF0 = SC_RESTORE then
Beep;
inherited
end;
Юрий Зотов (2005-01-18 20:11:00) [9]type
TForm1 = class(TForm)
...
private
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
...
end;
procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
inherited;
if Message.CmdType and $FFF0 in [SC_MAXIMIZE, SC_RESTORE] then
MessageBeep(0)
end;
rolex (2005-01-18 20:01:00) [10]А Как??? Дайте примерчик плз!!!
Юрий Зотов (2005-01-18 19:12:00) [11]Обрабатывайте WM_SYSCOMMAND.