![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват нажатия системной кнопки "свернуть" [D6, WinXP]
BAYES © (2004-08-04 14:14:00)Здраствуйте.
Мне нужно при нажатии кнопки "свернуть", как-нибудь перехватить нажатие и не свернуть окно, а спрятать (Showwindow(findwindow(nil,'бла-бла'),SW_HIDE);
Sandman25 (2004-08-04 15:57:00) [1][11] Юрий Зотов © (04.08.04 15:53)
Понятно.
Юрий Зотов (2004-08-04 15:53:00) [2]> Sandman25 © (04.08.04 14:56) [6]
Почему ошибка? Невозможно ведь выделить подполя размером в 3.5 и 0.5 байта, вот они и не выделены. А в исходниках самой VCL везде стоит and $FFF0.
> Labert (04.08.04 15:12) [7]
Из обычной справки по WM_SYSCOMMAND. Но и в MSDN, естественно, сказано то же самое.
BAYES (2004-08-04 15:35:00) [3]Конечно вопрос был поставлен коряво. Простите. Пасиба всем.
BAYES (2004-08-04 15:34:00) [4]Все разобрался, полазил по справкам, по талмудам.
У меня вышло вот так.
...
procedure WMMinimize(var Message: TMessage); message WM_SYSCOMMAND;
...
implementation
{$R *.dfm}
procedure TForm1.WMMinimize(var Message: TMessage);
begin
if Message.WParam = SC_MINIMIZE then form1.Visible:=False
Else Inherited;
end;
Labert (2004-08-04 15:13:00) [5]Проглядел сообщение Sandman25...
Получается что все-таки мой вариант правильный...
Labert (2004-08-04 15:12:00) [6]2 BAYES
а что за ошибка? что компилятор говорит?
2 Юрий Зотов
Замечание принимаю...
Это вы откуда, из MSDNа взяли?
Sandman25 (2004-08-04 14:56:00) [7]TWMSysCommand = packed record
Msg: Cardinal;
case CmdType: Longint of
SC_HOTKEY: (
ActivateWnd: HWND);
SC_KEYMENU: (
Key: Word);
SC_CLOSE, SC_HSCROLL, SC_MAXIMIZE, SC_MINIMIZE, SC_MOUSEMENU, SC_MOVE,
SC_NEXTWINDOW, SC_PREVWINDOW, SC_RESTORE, SC_SCREENSAVE, SC_SIZE,
SC_TASKLIST, SC_VSCROLL: (
XPos: Smallint;
YPos: Smallint;
Result: Longint);
end;
Нет учета особенности тех самых 4 битов.
Sergey Kaminski (2004-08-04 14:47:00) [8]Sandman25 © (04.08.04 14:41) [4]
Почему ошибка?
Sandman25 (2004-08-04 14:41:00) [9][2] Юрий Зотов © (04.08.04 14:28)
То есть в описании TWMSysCommand ошибка?
BAYES (2004-08-04 14:38:00) [10]Видел все это в справке, а и в и-нете, везде одно и тоже написано. Но мне, ввиду малого профессионализма,это не очень понятно.Я без зазрения совести просто воткнул этот код,компилятор ругается...!?
Labert (04.08.04 14:22) [1]
Не мог ли пояснить немного (если не влом).
Юрий Зотов (2004-08-04 14:28:00) [11]> Labert (04.08.04 14:22) [1]
Remarks
...
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.
if Message.WParam and $FFF0 = SC_MINIMIZE then ...
Labert (2004-08-04 14:22:00) [12]
TMainForm = class(TForm)
....
procedure WMMinimize(var Message: TMessage); message WM_SYSCOMMAND;
....
end;
implementation
//обработчик минимизации окна
procedure TMainForm.WMMinimize(var Message: TMessage);
begin
if Message.WParam = SC_MINIMIZE then
DoSomething
else
inherited
end;