Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Форма паверх окон. Добавлено: 01.10.07 21:08  

Автор вопроса:  Nikoly
Тема старая,и примеры есть, но у меня они не работают. Голова опухла.

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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
А насчёт примера, добавь код из первого ответа +
Private Sub Form_Load()
    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
Форма не может быть выше всех.
Форма - нет, сообщение - да! :)
Option Explicit

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-сайт: www.harami.ru
 Профиль | | #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-сайт: sharpc.livejournal.com
 Профиль | | #15
Добавлено: 09.10.07 22:11
А что будет, если всепробивающее ядро встретится с неразрушаемой стенкой?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам