Программирование на 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
Кто сейчас на конференции
Сейчас этот форум просматривают: Google-бот и гости: 14