Узнать как открыта ли форма как модальная.

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

Узнать как открыта ли форма как модальная.

Сообщение Worobjoff » 07.11.2005 (Пн) 17:24

?
Пробовал через GetWindowPos - не получается. Все время .Flags=0

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 07.11.2005 (Пн) 17:49

Ты же её открывал, ты и знаешь.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 18:13

GetWindowLong и использовать расширенный набор маски параметров

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 19:10

Konst_One, не верю.
Дашь код? ;-)
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 20:49

Код: Выделить всё
Public Const WS_EX_DLGMODALFRAME = &H1&
Public Const WS_EX_TOPMOST = &H8&

Public Const GWL_EXSTYLE = (-20)

curstyle = GetWindowLong(NumberText.hwnd, GWL_EXSTYLE)
...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 21:11

Как это связано с модальностью? :shock:
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 21:30

WS_EX_DLGMODALFRAME - вот это

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 21:33

да, похоже, что с vbmodal - это никак не связано, сорри

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 21:44

если нет WS_EX_APP_WINDOW, то это модальное окно

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 21:56

Код: Выделить всё
Public Const WS_EX_APP_WINDOW = &H40000
Public Const GWL_EXSTYLE = (-20)
Public Const GWL_STYLE = (-16)
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'
'
Private Sub Form_Load()
Dim curstyle As Long

curstyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
If curstyle And WS_EX_APP_WINDOW Then
    Debug."non modal"
Else
    Debug.Print "modal"
End If
End Sub

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 21:56

если нет WS_EX_APPWINDOW, то это окно с ShowInTaskbar = False :-P

проверил твой код: всегда выдаёт "non modal"
Последний раз редактировалось tyomitch 07.11.2005 (Пн) 21:58, всего редактировалось 1 раз.
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 21:58

ничего подобного, это признак немодальности :wink:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 21:59

проверено, мин нет :lol:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 21:59

Konst_One, проверь свой код сам!! :evil:
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 22:00

Ну ептыть, мне сюда проект из двух форм, что ли, зааттачить?
Ну сунь ты сам свой код в одну из форм, из другой покажи первую модально, и зацени результат :evil: :evil:
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 22:01

Код: Выделить всё
'Form1
Option Explicit

Private Sub Command1_Click()
Form2.Show vbModal, Me
End Sub

Private Sub Command2_Click()
Form2.Show vbModeless, Me
End Sub

'Form2
Option Explicit
Private Sub Form_Click()
Dim curstyle As Long

curstyle = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
If curstyle And WS_EX_APP_WINDOW Then
    Print "non modal"
Else
    Print "modal"
End If

End Sub


попробуй еще разок

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 22:02

у меня все работает как надо :evil:
ЗЫ
ShowInTaskbar=True у всех

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 22:03

А без ", Me" :?:
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 22:04

а вот это мы пока пропустим :lol:
подумать надо

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 22:05

и без Me работает, а в чем у тебя проблема?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 22:06

В Form_Load, как в твоём первом коде -- не работает. В Form_Click - вроде как работает :roll:
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 22:08

Если у Form2 выставлен ShowInTaskbar=False, то не работает даже в Form_Click :!: :twisted:
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 22:08

со всеми другими произвольными стилями для окна - также работает как надо.

так что, результат налицо - МОЖНО юзать :!:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 22:09

МОЖНО юзать только для тех форм, у которых ShowInTaskbar=True.
Изображение

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 22:12

Если у Form2 выставлен ShowInTaskbar=False, то не работает даже в Form_Click



Да, не проверил до конца :cry:
Этот вариант не работает.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 07.11.2005 (Пн) 22:18

Что-то ничего на ум не приходит. Очень странно, но в таком режиме пока никак не пойму, как можно определить модальность.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.11.2005 (Пн) 22:47

Да никак не можно, в общем случае. Модальность - не свойство окна, это свойство проги целиком.
Изображение

Worobjoff
Новичок
Новичок
 
Сообщения: 25
Зарегистрирован: 19.02.2005 (Сб) 17:51

Сообщение Worobjoff » 08.11.2005 (Вт) 11:50

Спасибо за внимание вопросу.
В общем понял.
Ну не так и много крови будет это стоить если форма не знает как она вызвана (в уже написанной программе).


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

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

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

    TopList