Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Рабочий стол
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.01.2011, 17:39
Аватар для AnKor94
AnKor94 AnKor94 вне форума
Прохожий
 
Регистрация: 01.12.2009
Сообщения: 13
Репутация: 10
По умолчанию Виджет

Пишу что-то навроде виджета с разнообразной информацией (для себя)



В последствие будет гораздо больше пунктов, но пока только температура за окном

В правом нижнем углу у меня прозрачная форма. Как запретить ей сворачиваться при нажатии на "Свернуть все окна" ?

Облазив все форумы и перепробовав множество примеров эффекта не добился.

Разве что кодом

Код:
procedure TForm1.Restore(Sender: TObject); 

begin 

Application.Restore; 

SetWindowPos(Application.Handle, HWND_TOPMOST, Left,Top,Width,Height, 

SWP_NOMOVE or SWP_NOSIZE) 

end; 

procedure TForm1.Create(Sender: TObject); 

begin 

Application.OnMinimize := Restore; 

Application.OnDeactivate := Restore; 

end;

Но при этом форма не только не сворачивается, но и всегда поверх всех окон, что тоже не хорошо..

Прошу помощи
__________________
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military)
Ответить с цитированием
  #2  
Старый 18.01.2011, 17:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Варианты:
1. Обработать сообщение минимизации окна самостоятельнои не давать ему сворачиваться (WM_MINIMIZE, если не ошибаюсь).
2. Делать не через форму, а через отрисовку напямую на десктопе. Примеров полно.
Ответить с цитированием
  #3  
Старый 18.01.2011, 17:47
Аватар для AnKor94
AnKor94 AnKor94 вне форума
Прохожий
 
Регистрация: 01.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

1) Не помогает, так как ярлык "Свернуть все окна" не сворачивает форму, а показывает рабочий стол поверх моего приложения.
2) Можно подробней, пожалуйста?
__________________
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military)
Ответить с цитированием
  #4  
Старый 18.01.2011, 17:54
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Код:
procedure TForm1.Restore(Sender: TObject); 
begin
Application.Restore;
SetWindowPos(Application.Handle, HWND_TOPMOST, Left,Top,Width,Height,
SWP_NOMOVE or SWP_NOSIZE)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMinimize := Restore;
  Application.OnDeactivate := Restore;
end;
Так будет отлавливать сообщение минимизации и восстанавливать окно. По другому нормальным способом нельзя (т.к. Win+D все равно будет сворачивать все окна), а так оно опять разворачивается.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 18.01.2011, 18:05
Аватар для AnKor94
AnKor94 AnKor94 вне форума
Прохожий
 
Регистрация: 01.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

эмм.. а чем это отличается от того, что привел я в первом посте?
и я комментировал, что
Цитата:
при этом форма не только не сворачивается, но и всегда поверх всех окон, что тоже не хорошо..

Мне ведь нужен виджет, а когда он поверх окна браузера - сами понимаете...
__________________
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military)
Ответить с цитированием
  #6  
Старый 18.01.2011, 18:51
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Не внимательно читал
Ну вобщем я так полагаю, что нормально у тебя не получиться, можно извращаться.

Ставь хук на клаву и если юзер нажал win+d, то пробегай циклом по всем окнам + доочерним и посылай им WS_MINIMIZE (всем кроме своего окна!).
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 18.01.2011, 18:57
Аватар для AnKor94
AnKor94 AnKor94 вне форума
Прохожий
 
Регистрация: 01.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

Впринципе я пользоваться буду сам, поэтому вместо программы лучше модернизировать систему

Хоткеем (ни винД ни винМ) я не пользуюсь, нажимаю только на значек в панели задач..
Надо либо перепрограммировать панель задач на винМ вместо винД, либо написать свою программку, которая нажимает винМ.

А винМ не сворачивает мою программу.
__________________
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military)
Ответить с цитированием
  #8  
Старый 18.01.2011, 19:05
Rat Rat вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 391
Репутация: 6078
По умолчанию

А лучше всётаки рисовать на рабочем столе. Подробнее: раз,два, ну и вообще.
Ответить с цитированием
  #9  
Старый 18.01.2011, 19:13
Аватар для AnKor94
AnKor94 AnKor94 вне форума
Прохожий
 
Регистрация: 01.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

а как программно нажать win-m, чтоб все окна свернулись?
__________________
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military)
Ответить с цитированием
  #10  
Старый 18.01.2011, 19:24
Аватар для AnKor94
AnKor94 AnKor94 вне форума
Прохожий
 
Регистрация: 01.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

Разобрался

keybd_event(91, 0, 0, 0);
keybd_event(77, 0, 0, 0);
keybd_event(91, 0, KEYEVENTF_KEYUP, 0);
keybd_event(77, 0, KEYEVENTF_KEYUP, 0);
__________________
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military)
Ответить с цитированием
  #11  
Старый 18.01.2011, 20:01
Аватар для AnKor94
AnKor94 AnKor94 вне форума
Прохожий
 
Регистрация: 01.12.2009
Сообщения: 13
Репутация: 10
По умолчанию

Как можно сосчитать количество несвернутых окон?
__________________
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military)
Ответить с цитированием
  #12  
Старый 15.08.2011, 13:46
shnaider shnaider вне форума
Прохожий
 
Регистрация: 09.06.2008
Сообщения: 1
Репутация: 10
По умолчанию

Цитата:
Сообщение от AnKor94
эмм.. а чем это отличается от того, что привел я в первом посте?
и я комментировал, что

Мне ведь нужен виджет, а когда он поверх окна браузера - сами понимаете...

так ты же его сам рисовал как поверх всех окон SetWindowPos(Application.Handle, HWND_TOPMOST, Left,Top,Width,Height,
SWP_NOMOVE or SWP_NOSIZE)

попробуй

SetWindowPos(Application.Handle,HWND_BOTTOM, Left,Top,Width,Height,
SWP_NOMOVE or SWP_NOSIZE)
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter