Страница: 1 | 2 |
Вопрос: Форма паверх окон.
Добавлено: 01.10.07 21:08
Автор вопроса: Nikoly
Тема старая,и примеры есть, но у меня они не работают. Голова опухла.
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 01.10.07 21:38
наверное самая избитая тема...
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
Public Sub AlwaysOnTop(ByVal hWnd As Long, ByVal OnTop As Boolean) ' Поверх всех окон
Call SetWindowPos(hWnd, IIf(OnTop, &HFFFFFFFF, &HFFFE&, &H0, &H0, &H0, &H0, &H1 Or &H3)
End Sub
Номер ответа: 2
Автор ответа:
Nikoly
Вопросов: 12
Ответов: 26
Профиль | | #2
Добавлено: 01.10.07 21:54
Тема избитая... Только что поробовал этот пример форма закрываетя другими окнами.
Номер ответа: 3
Автор ответа:
Nikoly
Вопросов: 12
Ответов: 26
Профиль | | #3
Добавлено: 01.10.07 22:55
Может еще варианты есть ?
Номер ответа: 4
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #4
Добавлено: 01.10.07 23:06
Тебе надо выше всех-всех?
Номер ответа: 5
Автор ответа:
Nikoly
Вопросов: 12
Ответов: 26
Профиль | | #5
Добавлено: 01.10.07 23:11
Да. Чтобы форму было всегда видно. Я раньше это делал но забыл как.
Номер ответа: 6
Автор ответа:
Stuart
Вопросов: 5
Ответов: 152
Профиль | | #6
Добавлено: 01.10.07 23:12
В модуль пишиш следующий код:
Public 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
Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOPMOST = -1
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
После возвращайся к форме, и вот еще код:
Public Sub SetFormPosition(frmHandl As Long, TopPosition As Boolean)
If TopPosition Then
SetWindowPos frmHandl, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
Else
SetWindowPos frmHandl, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End If
End Sub
Private Sub Form_Load()
Call SetFormPosition(Me.hwnd, True)
End Sub
и всё!
Номер ответа: 7
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #7
Добавлено: 01.10.07 23:13
А насчёт примера, добавь код из первого ответа +
AlwaysOnTop Me.hWnd, True
End Sub
Номер ответа: 8
Автор ответа:
Nikoly
Вопросов: 12
Ответов: 26
Профиль | | #8
Добавлено: 01.10.07 23:20
Спасибо.
Я забыл, что модуль добавлять надо.
Номер ответа: 9
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #9
Добавлено: 01.10.07 23:41
Можно и без модуля. Ответ 1 + Ответ 7 = Ответ 6!
Номер ответа: 10
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #10
Добавлено: 02.10.07 00:34
Форма не может быть выше всех.
Если форма будет стандартно установлена поверх всех, то ее сможет перекрыть активная форма которая тоже имеет флаг поверх всех.
А если форма будет активироваться через какой-либо промежуток фремени и переодить на передний флаг, то что будет если на экране появятся несколько таких форм? жуть!
Так что не надо париться. Просто сделай форму стандартно поверх всех и не выеживайся. Потому-что если все так будут делать, то винде ппц прийдет еще раньше.
Номер ответа: 11
Автор ответа:
Mr.Smile
ICQ: 427682013
Вопросов: 14
Ответов: 464
Профиль | | #11
Добавлено: 02.10.07 12:05
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Private Sub Form_Load()
MessageBox 0, "Zero-level message box", "Одно в своём роде", &H20000
End Sub
Номер ответа: 12
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #12
Добавлено: 02.10.07 20:59
Не знал такого. Всеже если разобраться, то сообщение - тоже форма.
Думаю что вопрос раскрыт.
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 03.10.07 11:24
Не факт. Далеко...
Номер ответа: 14
Автор ответа:
Иван
Вопросов: 34
Ответов: 53
Web-сайт:
Профиль | | #14
Добавлено: 09.10.07 16:53
Я обычно делаю так:
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
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
А это чек-бокс в форме, который включает/отключает опцию "Поверх остальных":
Private Sub Check1_Click()
Select Case Check1
Case 1
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
Case 0
SetWindowPos hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End Select
End Sub
Номер ответа: 15
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #15
Добавлено: 09.10.07 22:11
А что будет, если всепробивающее ядро встретится с неразрушаемой стенкой?