Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Всегда сверху


Автор: amt 9.11.2004, 22:25
Помогите кто может.
Маленький вопросик.
Как сделать чтобы окно формы всегда было поверх остальных окон, даже при потере фокуса?

Автор: Vach 9.11.2004, 23:59
Код
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

Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40

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


Удачи.

Автор: Guest 11.11.2004, 14:52
Vash,
что-то у меня не получается. Как запустить процедуру SetFormPosition, где к ней надо обратиься?

Автор: Mephisto 11.11.2004, 15:12
Код

Private Sub Form_Load()
   SetFormPosition(frmMain.hWnd,True)
End Sub

Где frmMain название твое формы, которая должна быть поверх всех.
Чтобы полностью насладится процессом необходимо запускать сам *.exe файл.

Автор: amt 12.11.2004, 11:53
Mephisto
Красота!
Спасибо!

Автор: Mephisto 17.11.2004, 17:55
Цитата
Mephisto
Красота!
Спасибо!

Да это не мне спасибо. Эт я понял что Vach хотел сказать.

Хотя я бы так написал:
Код

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 Sub Form_Load()
  SetWindowPos Me.hWnd,-1,0,0,0,0,&H1 or &H2
End Sub

Автор: REVOLT 17.11.2004, 20:18
Цитата

Код 

Private Sub Form_Load()
  SetFormPosition(frmMain.hWnd,True)
End Sub


А по моему это должно выглядеть так

Код

Private Sub Form_Load()
  SetFormPosition frmMain.hWnd,True
End Sub


Автор: cardinal 17.11.2004, 20:44
Цитата(Mephisto @ 17.11.2004, 16:55)
Хотя я бы так написал:

Код

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 Sub Form_Load()
  SetWindowPos Me.hWnd,-1,0,0,0,0,&H1 or &H2
End Sub

А я бы так:
Код

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 Sub Form_Load()
 SetWindowPos Me.hWnd,-1,0,0,0,0,&H3
End Sub
smile

Автор: amt 17.11.2004, 21:48
РеБята, всем С-П-А-С-И-Б-О!
Я запустил код
Цитата
Код 

Private Sub Form_Load()
  SetFormPosition(frmMain.hWnd,True)
End Sub



Где frmMain название твое формы, которая должна быть поверх всех.
Чтобы полностью насладится процессом необходимо запускать сам *.exe файл.


он работает, изменять не хочется , да и нет времени. Он работает!
Но все равно всем спасибо.

Автор: REVOLT 18.11.2004, 16:05
amt
Цитата

Цитата 
Код 

Private Sub Form_Load()
  SetFormPosition(frmMain.hWnd,True)
End Sub



а у тебя эта строка работает
Код

SetFormPosition(frmMain.hWnd,True)


у меня отказывается? зат работает эта
Код

SetFormPosition frmMain.hWnd,True

Автор: Mephisto 18.11.2004, 16:54
Код

Private Sub Form_Load()
   SetWindowPos Me.hWnd,-1,0,0,0,0,&H1 or &H2
End Sub

Это правильно. У меня ВБ нет. Пишу и компилирую в уме.

Автор: REVOLT 18.11.2004, 19:49
Mephisto, извиняюсь за оффтоп, хороший у тебя ум, мне бы такой... Ладно написать, так ещё ит скомпелировать надо... smile smile

Автор: cardinal 18.11.2004, 20:34
Можно писать так
Код

Call SetFormPosition(frmMain.hWnd,True)

так
Код

SetFormPosition frmMain.hWnd,True

или так
Код

x = SetFormPosition(frmMain.hWnd,True)

Автор: Mephisto 22.11.2004, 19:06
Код
Rem MiznauChemuPrisvoit=HochuFormuPoverhVseh(MouFormu.шВНД, Pravda)


Можно и так. Компилирует, но ничего не делает. Может кто найдет ошибку.
Цитата
Mephisto, извиняюсь за оффтоп, хороший у тебя ум, мне бы такой... Ладно написать, так ещё ит скомпелировать надо...

Приходится ВБ то нет. smile
Ладно, давайте закроем тему. smile

Автор: cardinal 23.11.2004, 16:47
Цитата(Mephisto @ 22.11.2004, 18:06)
Ладно, давайте закроем тему

А если кому что в голову еще придет на тему
Цитата(amt @ 9.11.2004, 21:25)
Как сделать чтобы окно формы всегда было поверх остальных окон, даже при потере фокуса?


Автор: -Mikle- 23.11.2004, 18:32
Цитата(cardinal @ 23.11.2004, 20:47)
А если кому что в голову еще придет на тему

а что тут еще может прийти? smile

Автор: cardinal 23.11.2004, 19:54
Не знаю smile Не принято у нас темы закрывать. Если закрыть одну, то закрывать надо все...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)