Форма принудительно поверх других

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Capone
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 18.09.2004 (Сб) 17:34

Форма принудительно поверх других

Сообщение Capone » 02.02.2005 (Ср) 8:08

Как сделать, чтобы форма появлялась поверх всех остальных и ее нельзя было убрать, кроме как нажатием на ней кнопки?

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 02.02.2005 (Ср) 8:26

В модуле напиши:
Код: Выделить всё
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_NOTOPMOST = -2
Private Const HWND_TOPMOST = -1
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1


Public Sub SetFormPosition(frmHandl As Long, TopPosition As Boolean)
On Error GoTo 1
If TopPosition = False Then
SetWindowPos frmHandl, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
Else
SetWindowPos frmHandl, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE
End If
1:
Exit Sub
End Sub


И в форме:

Код: Выделить всё
Private Sub Form_Load()
SetFormPosition Me.hWnd, True 'Это поставит форму поверх других
End Sub

Private Sub Form_Unload(Cancel As Integer)
Cancel = True 'Это сделает невозмодным закрыть форму, даже при нажатии на красный крестик ;)
End Sub


Вроед всё.. =)

С уважением Андрей.[/code]

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 02.02.2005 (Ср) 8:51

2 Крост
ИМХО, проще надо быть :)
Код: Выделить всё
'показ формы
Dim ModalForm As New MyModalForm
ModalForm.Show vbModal

А если нужно, чтобы форму нельзя было закрыть "крестиком", а можно было только кнопкой, тогда вот это - в самой форме, которая поверх всех окон:
Код: Выделить всё
Private ButtonPressed As Boolean
Private Sub CloseButton_Click() ' это нажатие на ту кнопку, которой позволено закрывать форму
    ButtonPressed = True
    Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
    If Not ButtonPressed Then
        Cancel = True
    End If
End Sub
Есть ли у меня вопрос? У меня всегда есть вопрос

Крост
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 291
Зарегистрирован: 30.01.2005 (Вс) 6:06
Откуда: Питер

Сообщение Крост » 02.02.2005 (Ср) 9:09

Имхо при использовании FRM.Show vbmodal - форма пудет поверх всех только в том приложении, в котором находиться эта форма,
а если надо чтобы поверх всех? Вообще всех окон Windows...

Eugenio
Постоялец
Постоялец
 
Сообщения: 393
Зарегистрирован: 08.05.2004 (Сб) 13:27
Откуда: Ekaterinburg

Сообщение Eugenio » 02.02.2005 (Ср) 9:15

Крост писал(а):Имхо при использовании FRM.Show vbmodal - форма пудет поверх всех только в том приложении, в котором находиться эта форма...

Да, всё правильно. Так не писал человек о том, вроде (про "поверх вообще всех окон Windows").
Есть ли у меня вопрос? У меня всегда есть вопрос


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList  
cron