Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как отключить состояние "поверх всех окон" / 9 сообщений из 9, страница 1 из 1
16.12.2011, 18:45
    #37580426
donpauls
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
Для включения этого состояния использую следующий код:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Option Explicit
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOZORDER = &H4
Const SWP_NOREDRAW = &H8
Const SWP_NOACTIVATE = &H10
Const SWP_FRAMECHANGED = &H20        '  The frame changed: send WM_NCCALCSIZE
Const SWP_SHOWWINDOW = &H40
Const SWP_HIDEWINDOW = &H80
Const SWP_NOCOPYBITS = &H100
Const SWP_NOOWNERZORDER = &H200      '  Don't do owner Z ordering
Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
Const HWND_TOP = 0
Const HWND_BOTTOM = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2

'Кнопка "Поверх всех окон"
Private Sub Command1_Click()
Dim i
    i = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
End Sub



Вопрос: какой код должна содержать кнопка "Отменить состояние "Поверх всех окон""?
...
Рейтинг: 0 / 0
16.12.2011, 19:01
    #37580457
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
donpauls,

я думаю, вполне логично, что если константа HWND_TOPMOST ставит твоё окно поверх остальных, то константа HWND_NOTOPMOST должна это становление отменять)))

Код: vbnet
1.
2.
3.
4.
Private Sub Command2_Click()
Dim i
    i = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
End Sub
...
Рейтинг: 0 / 0
16.12.2011, 22:44
    #37580748
donpauls
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
BelowZero,

Спасибо, работает!
...
Рейтинг: 0 / 0
09.03.2012, 17:29
    #37697249
donpauls
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
BelowZerodonpauls,

я думаю, вполне логично, что если константа HWND_TOPMOST ставит твоё окно поверх остальных, то константа HWND_NOTOPMOST должна это становление отменять)))

Код: vbnet
1.
2.
3.
4.
Private Sub Command2_Click()
Dim i
    i = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE)
End Sub



Данная константа действительно это становление отменяет, однако пока мышкой не кликнешь по форме, ничего не происходит, т.е. форма так и остаётся висеть поверх всех окон..
...
Рейтинг: 0 / 0
09.03.2012, 18:14
    #37697273
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
donpauls,

Код: vbnet
1.
2.
3.
Private Sub Command3_Click()
Form1.WindowState = 1
End Sub
...
Рейтинг: 0 / 0
09.03.2012, 18:18
    #37697275
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
donpauls однако пока мышкой не кликнешь по форме мб ты имел в виду по рабочему столу? или что угодно, но не форма своей проги donpaulsничего не происходит, т.е. форма так и остаётся висеть поверх всех окон.. а чего ты ожидал? ты жмёшь на кнопку своей проги. логично, что фокус остаётся у этой проги
...
Рейтинг: 0 / 0
09.03.2012, 23:53
    #37697470
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
donpaulsДанная константа действительно это становление отменяет, однако пока мышкой не кликнешь по форме, ничего не происходит, т.е. форма так и остаётся висеть поверх всех окон..
Код: vbnet
1.
SetForegroundWindow
...
Рейтинг: 0 / 0
10.03.2012, 03:09
    #37697534
donpauls
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
BelowZerodonpauls однако пока мышкой не кликнешь по форме мб ты имел в виду по рабочему столу? или что угодно, но не форма своей проги donpaulsничего не происходит, т.е. форма так и остаётся висеть поверх всех окон.. а чего ты ожидал? ты жмёшь на кнопку своей проги. логично, что фокус остаётся у этой проги

Дело в том, что не я жму на кнопку, а другие процессы заставляют форму появляться сверху.

Но всё равно спасибо!
Form1.WindowState = 1 - помогло
...
Рейтинг: 0 / 0
10.03.2012, 08:48
    #37697565
BelowZero
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отключить состояние "поверх всех окон"
donpauls,

этот код сворачивает форму. если нужно просто сделать окно неактивным, то нужно сделать активным любое другое окно
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как отключить состояние "поверх всех окон" / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]