![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Знак минимизации окна. [D7, XP]
Псарь © (2011-09-26 22:04:00)Какое сообщение WM_XXX нужно словить, чтобы узнать минимизировано ли окно или нет.
WM_Size - SIZE_MINIMIZED - Не работает.
IsIconic не подходит.
Dennis I. Komarov (2011-09-27 20:46:00) [21]Надо лезть в генофонд, ибо [10]
QAZ (2011-09-27 20:33:00) [22]
> Омлет © (27.09.11 15:23) [12]
> Это косяк Delphi.
> В 2007 работает как надо.
это не косяк делфи,так работает винда
а вот в 2007 наверно нахитромудрили или у тебя чтото нетак
вообщето
на минимизацию приходит WM_SHOWWINDOW,false,SW_PARENTCLOSING
а на раскрытие WM_SHOWWINDOW,true,SW_PARENTOPENING
и это уже работает действительно везде и всегда
Псарь (2011-09-27 15:31:00) [23]
> Омлет © (27.09.11 15:30) [14]
Спасибо за тесты.
Омлет (2011-09-27 15:30:00) [24]> Псарь (27.09.11 15:26) [13]
Да. Работает при Win+M, при Win+D и при обычном сворачивании кнопкой.
Псарь (2011-09-27 15:26:00) [25]
> Омлет © (27.09.11 15:23) [12]
>
> Это косяк Delphi.
> В 2007 работает как надо.
Это, работает при Win + D?
WM_SIZE:
begin
If (wParam = SIZE_MINIMIZED) then Close; // Не работает. Почему?
end;
Омлет (2011-09-27 15:23:00) [26]Это косяк Delphi.
В 2007 работает как надо.
Игорь Шевченко (2011-09-27 15:20:00) [27]
> Но при Win + D, да не работает
При Win+D окно рабочего стола выходит на передний план, заслоняя собой все остальные окна. При этом остальные окна не минимизируются и не изменяют свой размер, насколько мне известно. Они просто заслоняются
Псарь (2011-09-27 15:20:00) [28]
> Cobalt © (27.09.11 15:08) [9]
Не, не пашет.
Cobalt (2011-09-27 15:08:00) [29]а ты попробуй вместо
If (wParam = SIZE_MINIMIZED) then Close;
написать
If (wParam = SIZE_MINIMIZED) then memo1.Lines.Add('SIZE_MINIMIZED');
Псарь (2011-09-27 14:37:00) [30]> Омлет © (27.09.11 11:46) [3]
> Ты уж определись, что тебе надо.
А кто мне тут GetWindowPlacement предлагал, а? :D
> Отловить событие сворачивания окна - это WM_SIZE при Message.SizeType = SIZEICONIC.
Оно не работает.
> Игорь Шевченко © (27.09.11 11:50) [4]
>
> WM_SYSCOMMAND
Спасибо.
Но при Win + D, да не работает. Временный вариант.
procedure TForm1.WndProc(var Message: TMessage);
begin
with Message do
case Msg of
WM_SIZE:
begin
If (wParam = SIZE_MINIMIZED) then Close; // Не работает. Почему?
end;
WM_SYSCOMMAND:
begin
If (wParam = SC_MINIMIZE) then Close; // Работает.
end;
end;
inherited;
end;
Омлет (2011-09-27 13:15:00) [31]> Игорь Шевченко © (27.09.11 13:04) [6]
И какого пользователя это волнует? )
Игорь Шевченко (2011-09-27 13:04:00) [32]Омлет © (27.09.11 12:05) [5]
При Win+D окно "не совсем минимизируется"
Омлет (2011-09-27 12:05:00) [33]Только надо учесть, что WM_SYSCOMMAND не срабатывает, к примеру, при сворачивании посредством нажатия Win+D или Win+M.
Игорь Шевченко (2011-09-27 11:50:00) [34]WM_SYSCOMMAND
Омлет (2011-09-27 11:46:00) [35]> Тогда уж лучше IsIconic.
> Нужно сообщение, а не функция.
Ну-ну. IsIconic - это типа сообщение ))
Ты уж определись, что тебе надо.
Узнать, минимизировано ли окно - это GetWindowPlacement.
Отловить событие сворачивания окна - это WM_SIZE при Message.SizeType = SIZEICONIC.
Псарь (2011-09-27 11:33:00) [36]
> Омлет © (26.09.11 22:25) [1]
>
> GetWindowPlacement
Тогда уж лучше IsIconic.
Нужно сообщение, а не функция.
Омлет (2011-09-26 22:25:00) [37]GetWindowPlacement