Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2009, 14:06   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Что происходит во время Win+D?

Всем привет! Ещё одна тема с некорректным поведением окон. И опять в примере DownloadMaster. Программа та-же что и в http://programmersforum.ru/showthread.php?t=65809 Ситуация следующая: Короче я хочу, что-бы одно окно, не имело иконки в таскБаре. Оно её и не имеет по-умолчанию. Так как в приложении нет главных (Application.mainForm) форм которые создаются методом Application.createForm то окна не имеют кнопку в таскБаре. Дело исправляю при помощи функции
Код:
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
Проблема в том, что как я уже говорил, не хочу что-бы у одного кна была кнопка в таскБаре но если её там нет, окно ведёт себя не корректно после Win+D. (Показать рабочий стол) Замечу, что при Win+M (Свернуть все окна) всё нормально, а точнее вообще не сворачивается. Не корректность заключается в том, что оно (окно без кнопки в таскБаре) появляется как только я щёлкаю по иконки приложения в трее (т.е. Приложению передаётся фокус и окно тоже появляется с фокусом), но оно исчезает как только с него ухоит фокус на другое приложение, скажем, при щелчке по раб. столу. Замечу, что если в такой ситуации не по раб. столу щёлкать а открыть другое окно сего окна сего приложения, то окно больше не исчезает при потере фокуса. Ситуация повториться при следующем Win+D. И ещё замечу, что плавающее окошко у DownloadMaster-а тоже без кнопки в таскБаре, но оно не исчезает при Win+D. Помогите сделать нормально.
Altera вне форума Ответить с цитированием
Старый 06.12.2009, 15:05   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

«Win+D» — свернуть/восстановить все окна, включая диалоговые;
«Win+M» — сворачивает все окна, кроме диалоговых;

А вот как исправить незнаю. Знаю что это окно у дм похоже на окно компонента AdvAlertWindow.
dr.Chas вне форума Ответить с цитированием
Старый 06.12.2009, 17:10   #3
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Ага, ясно. А что на счет функции createParams? Может в параметрах что-то изменить надо?
Altera вне форума Ответить с цитированием
Старый 06.12.2009, 17:14   #4
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Может лучше отлавливать событие минимизации?
Lime вне форума Ответить с цитированием
Старый 06.12.2009, 20:03   #5
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Да славливаю я его. Не помогает. Не приходит сообщение минимизации (при Win+d) не в обрабодчик
Код:
procedure WMSysCommand(var m: TMessage); message WM_SYSCOMMAND;
Код:
procedure TSomeForm.WMSysCommand(var m: TMessage);
begin
   if m.WParam = SC_MINIMIZE then
      close
   else
      m.Result := DefWindowProc(Handle, m.Msg, m.wParam, m.lParam);
end;
и не в application.onMinimize;
Altera вне форума Ответить с цитированием
Старый 07.12.2009, 22:34   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А обычное
Код:
procedure TMyForm.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, sw_Hide); 
end;
совместно с formStyle = fsStayOnTop для всех окон приложения - не помогает?
Ей-богу, я так до конца и не понял проблему...
mihali4 вне форума Ответить с цитированием
Старый 08.12.2009, 09:18   #7
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Нет. Не помогает. И кнопка приложения с меня и так не отображается:
Код:
application.mainFormOnTaskbar := true;
в дпр файле.
Как мне узнать, когда юзер жмет Win+D? Никакое уведомление окну не приходит?
Altera вне форума Ответить с цитированием
Старый 13.12.2009, 16:10   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Altera Посмотреть сообщение
Как мне узнать, когда юзер жмет Win+D? Никакое уведомление окну не приходит?

<00018> 00040452 P WM_KEYDOWN nVirtKey:VK_LWIN cRepeat:1 ScanCode:5B fExtended:1 fAltDown:0 fRepeat:0 fUp:0
<00019> 00040452 S message:0xBD00 [User-defined:WM_USER+47360] wParam:0000005B lParam:015B0001
<00020> 00040452 R message:0xBD00 [User-defined:WM_USER+47360] lResult:00000000
<00021> 00040452 S WM_SHOWWINDOW fShow:False fuStatus:SW_PARENTCLOSING
<00022> 00040452 S WM_SHOWWINDOW fShow:False fuStatus:0 (ShowWindow was called)
<00023> 00040452 R WM_SHOWWINDOW
<00024> 00040452 S WM_WINDOWPOSCHANGING lpwp:0012F7A4
<00025> 00040452 R WM_WINDOWPOSCHANGING
<00026> 00040452 S WM_WINDOWPOSCHANGED lpwp:0012F7A4
<00027> 00040452 R WM_WINDOWPOSCHANGED
<00028> 00040452 S WM_NCACTIVATE fActive:False
<00029> 00040452 R WM_NCACTIVATE fDeactivateOK:True
<00030> 00040452 S WM_ACTIVATE fActive:WA_INACTIVE fMinimized:False hwndPrevious:(null)
<00031> 00040452 R WM_ACTIVATE
<00032> 00040452 S WM_ACTIVATEAPP fActive:False dwThreadID:00000918
<00033> 00040452 R WM_ACTIVATEAPP
<00034> 00040452 S WM_KILLFOCUS hwndGetFocus:(null)
<00035> 00040452 R WM_KILLFOCUS
<00036> 00040452 R WM_SHOWWINDOW
<00037> 00040452 S WM_WINDOWPOSCHANGING lpwp:0012FEB4
<00038> 00040452 R WM_WINDOWPOSCHANGING
<00039> 00040452 S WM_WINDOWPOSCHANGED lpwp:0012FEB4
<00040> 00040452 R WM_WINDOWPOSCHANGED

Последний раз редактировалось mihali4; 13.12.2009 в 17:41. Причина: десмайлизация
Somebody вне форума Ответить с цитированием
Старый 13.12.2009, 16:15   #9
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Как я уже выше писал, это окно из дм, похоже на компонент AdvAlertWindow. Поковыряв его с минут 30 вот что у меня получилось. Там же пример из ассемблера. Взят здесь.
Вложения
Тип файла: rar Пример.rar (163.2 Кб, 27 просмотров)
dr.Chas вне форума Ответить с цитированием
Старый 14.12.2009, 04:48   #10
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от dr.Chas Посмотреть сообщение
Как я уже выше писал, это окно из дм, похоже на компонент AdvAlertWindow. Поковыряв его с минут 30 вот что у меня получилось. Там же пример из ассемблера. Взят здесь.
Что-то подобное я пытался сделать. Это не совсем то. Я хочу именно отловить сообщение. Мне не нужно, что-бы окно не пряталось. Может DefWindowProc на прямую вызывается?

2Somebody, это что за прога?

з.ы.
Цитата:
Причина: десмайлизация
Altera вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
висне сет при запуску Win XP после установки Win 7 VVkSoft Windows 3 15.09.2009 10:36
Что происходит, если комп перегреваеться? Altera Компьютерное железо 35 02.06.2009 20:04
Что происходит с локальным сервером??? just me PHP 13 14.04.2009 14:01
что происходит при нажатии power bnv Компьютерное железо 5 09.03.2009 14:39
мастер установки, не пойму что происходит! ronich Помощь студентам 0 27.11.2007 20:59