|
|
#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
|
|||
|
|||
Цитата:
так ты же его сам рисовал как поверх всех окон 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) |