Как программно узнать, модальная форма или немодальная

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

Как программно узнать, модальная форма или немодальная

Сообщение Jupiter » 11.01.2007 (Чт) 15:00

У меня одна и та же форма из одних мест вызывается как модальная, из других - как немодальная. Как изнутри эта форма может узнать свой режим модальности? Хочу чтобы было так:
Код: Выделить всё
If Me.IsModal Then ....

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2007 (Чт) 15:01

Хотелось бы узнать, что после then...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Jupiter
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 17.01.2006 (Вт) 12:34

Сообщение Jupiter » 11.01.2007 (Чт) 15:08

GSerg писал(а):Хотелось бы узнать, что после then...
Код: Выделить всё
If Me.IsModal Then
    ' Результат выбора пользователя запомнить в
    '  (глобальной) переменной
   Unload Me ' Закрыть модальную форму
Else
    FrmParent.OnChoice  ' Прямо отсюда сообщить о событии родителю
     ' ... и остаться работать
End If

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.01.2007 (Чт) 15:12

А в чем необходимость модального и немодального режима?
Кроме того, уведомлять о событиях можно разными способами. Например, RaiseEvent.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 11.01.2007 (Чт) 16:19

Бывает такая необходимость.
Проще всего открывать такую форму через публичную процедуру.
Код: Выделить всё
Dim vMode as FormShowConstants

Public sub ShowForm(Mode as FormShowConstants)
    vMode = Mode
   Me.Show Mode
End Sub
Лучший способ понять что-то самому — объяснить это другому.

Jupiter
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 17.01.2006 (Вт) 12:34

Сообщение Jupiter » 11.01.2007 (Чт) 16:59

Antonariy писал(а):Бывает такая необходимость.
Проще всего открывать такую форму через публичную процедуру.
Понятно. Ну, способов сохранить эту информацию самому - куча. Можно и внутри формы иметь такую переменную-флаг. Я думал есть что-то более естественное.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.01.2007 (Чт) 17:22

Наверное, можно стиль окна получить и по нему смотреть.
Lasciate ogni speranza, voi ch'entrate.

Jupiter
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 17.01.2006 (Вт) 12:34

Сообщение Jupiter » 11.01.2007 (Чт) 18:00

alibek писал(а):Наверное, можно стиль окна получить и по нему смотреть.
Сейчас только проверил.
Код: Выделить всё
GetWindowLong(Me.hWnd, GWL_STYLE)
GetWindowLong(Me.hWnd, GWL_EXSTYLE)
выдают одно и то же для модального вызова формы и для немодального, соответственно.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 11.01.2007 (Чт) 19:47

А ковырять стили окна это более естественно?
Лучший способ понять что-то самому — объяснить это другому.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 12.01.2007 (Пт) 1:35

frmMain:
Код: Выделить всё
Dim x As New frmForm

Private Sub cmdShowModal_Click()
    x.Tag = "Modal"
    x.Show vbModal
End Sub

Private Sub cmdShowNonModal_Click()
    x.Tag = "Modeless"
    x.Show vbModeless
End Sub

Private Sub Form_Load()
    Load x
End Sub


frmForm:
Код: Выделить всё
Private Sub Form_Click()
    MsgBox Me.Tag
End Sub

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 12.01.2007 (Пт) 11:53

Amed
Этот код уже был в пятом посте.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 12.01.2007 (Пт) 12:23

в пятом посте код был несколько другой... посему автору предлагается выбор между глобальной переменной и использования свойства Tag
Весь мир матрица, а мы в нем потоки байтов!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 12.01.2007 (Пт) 12:29

Ну это косметические различия, которые роли не играют.
Lasciate ogni speranza, voi ch'entrate.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 16.01.2007 (Вт) 8:32

брр кхе, модальная форма это что? Извеняюсь за глупость

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.01.2007 (Вт) 8:52

в двух словах: модальная форма - это форма созданная таким образом, что до тех пор пока ты ее не закроешь ты не сможешь переключиться на другие формы приложения. Модальными формами например являются диалоги. А ваще google тебе в руки
Весь мир матрица, а мы в нем потоки байтов!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 16.01.2007 (Вт) 8:52

MSDN писал(а):modal
Describes a window or dialog box that requires the user to take some action before the focus can switch to another form or dialog box.

Модальная - форма, фокус с которой не может быть перемещен на другую форму приложения до ее [модальной формы] закрытия.

kuhtiov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 03.08.2006 (Чт) 5:31

Сообщение kuhtiov » 16.01.2007 (Вт) 9:15

Понятно. У меня с терминалогией хреново

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 31.01.2007 (Ср) 4:42

Ну вы блин даете.
Первое что в голову приходит:
Модальная форма обязана блокировать родителя.
Вот в стиле родителя и надо искать WS_DISABLED.


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

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

Сейчас этот форум просматривают: серверянин, Google-бот, The trick и гости: 1

    TopList