|
#1
|
||||
|
||||
Виджет
Пишу что-то навроде виджета с разнообразной информацией (для себя)
В последствие будет гораздо больше пунктов, но пока только температура за окном В правом нижнем углу у меня прозрачная форма. Как запретить ей сворачиваться при нажатии на "Свернуть все окна" ? Облазив все форумы и перепробовав множество примеров эффекта не добился. Разве что кодом Код:
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
|
|||
|
|||
Варианты:
1. Обработать сообщение минимизации окна самостоятельнои не давать ему сворачиваться (WM_MINIMIZE, если не ошибаюсь). 2. Делать не через форму, а через отрисовку напямую на десктопе. Примеров полно. |
#3
|
||||
|
||||
1) Не помогает, так как ярлык "Свернуть все окна" не сворачивает форму, а показывает рабочий стол поверх моего приложения.
2) Можно подробней, пожалуйста? 141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military) |
#4
|
||||
|
||||
Код:
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; Помогаю за Спасибо |
#5
|
||||
|
||||
эмм.. а чем это отличается от того, что привел я в первом посте?
и я комментировал, что Цитата:
Мне ведь нужен виджет, а когда он поверх окна браузера - сами понимаете... 141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military) |
#6
|
||||
|
||||
Не внимательно читал
Ну вобщем я так полагаю, что нормально у тебя не получиться, можно извращаться. Ставь хук на клаву и если юзер нажал win+d, то пробегай циклом по всем окнам + доочерним и посылай им WS_MINIMIZE (всем кроме своего окна!). Помогаю за Спасибо |
#7
|
||||
|
||||
Впринципе я пользоваться буду сам, поэтому вместо программы лучше модернизировать систему
Хоткеем (ни винД ни винМ) я не пользуюсь, нажимаю только на значек в панели задач.. Надо либо перепрограммировать панель задач на винМ вместо винД, либо написать свою программку, которая нажимает винМ. А винМ не сворачивает мою программу. 141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military) |
#9
|
||||
|
||||
а как программно нажать win-m, чтоб все окна свернулись?
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military) |
#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
|
||||
|
||||
Как можно сосчитать количество несвернутых окон?
141.116.168.135 : damiu2d449028.dami.army.pentagon.mil (.MIL | US Military) |
#12
|
|||
|
|||
Цитата:
так ты же его сам рисовал как поверх всех окон 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) |