Модальность окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Модальность окна

Сообщение Vovik » 02.12.2011 (Пт) 10:50

Подскажите пожалуйста, как сделать одно окно модальным относительно другого с помощью API. Написал товарищам библиотеку, в ф-цию которой передается объект (ессно форму пытаюсь отправить) и там уже .show vbmodal, frmowner. В Win7 вываливает ошибка Run-time err 377 This interaction between compiled and design environment components is not supported.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Модальность окна

Сообщение Rody66 » 02.12.2011 (Пт) 12:28

Код: Выделить всё
Public Declare Sub 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)

SetWindowPos Me.hwnd, frmOwner.hwnd, Me.Left, Me.Top, Me.Width, Me.Height, 0

А у хр с win 7, если речь идет о .show vbmodal, frmowner, то разницы нет. Насколько мне известно, и там, и там прекрасно работает.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Модальность окна

Сообщение Хакер » 02.12.2011 (Пт) 12:39

Rody66, не нужно постить многократно дрянной код.
Начиная тем, что он даже близко не делает никакой модальности (а просто прячет одно окно под другой, меняет порядок, то есть) и заканчивая тем, что функция принимает размеры в пикселях, а ты передаёшь размеры в твипах.

:x
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Rody66
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 183
Зарегистрирован: 16.01.2011 (Вс) 17:03

Re: Модальность окна

Сообщение Rody66 » 02.12.2011 (Пт) 13:06

функция принимает размеры в пикселях, а ты передаёшь размеры в твипах.

Это верно.
Код: Выделить всё
SetWindowPos Me.hwnd, frmOwner.hwnd, Me.Left  \ Screen.TwipsPerPixelX, Me.Top \ Screen.TwipsPerPixelY, Me.Width \ Screen.TwipsPerPixelX, Me.Height \ Screen.TwipsPerPixelY, 0

Начиная тем, что он даже близко не делает никакой модальности

В таком случае, имеется вариант слегка извратиться и реализовать что-то типа псевдомодальности.
А именно:
Форма-родитель:
Код: Выделить всё
Me.Enabled = False
frmChild.Show

Дочерняя форма, событие Load:
Код: Выделить всё
SetWindowPos Me.hwnd, frmOwner.hwnd, Me.Left  \ Screen.TwipsPerPixelX, Me.Top \ Screen.TwipsPerPixelY, Me.Width \ Screen.TwipsPerPixelX, Me.Height \ Screen.TwipsPerPixelY, 0

;Событие Unload:
Код: Выделить всё
frmOwner.Enabled = True

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Модальность окна

Сообщение Vovik » 02.12.2011 (Пт) 16:15

Ну это не совсем то.... ошибка вываливает как раз при попытке передать через объект форму в dll. Решил передать хэндл окна и показать форму из библы модальную к форме с полученным хэндлом. Вот и стал вопрос... а SetWindowPos - пробоал сразу, но эт немного не то, что мне нужно. :(

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Модальность окна

Сообщение Vovik » 12.12.2011 (Пн) 21:12

Что же делать? Может подскажите другое решение.... не могу ничего придумать. На ХР отлично работает.. А вот с 7 - трабл :(

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Модальность окна

Сообщение Хакер » 12.12.2011 (Пн) 21:43

Блин, человек 11 дней мучался, кряхтел...
Я вставил описание ошибки в поиск и нашёл статью.

На уровне генов что-ли заложено неиспользование поиска?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Модальность окна

Сообщение Vovik » 13.12.2011 (Вт) 0:40

Хакер писал(а):Блин, человек 11 дней мучался, кряхтел...
Я вставил описание ошибки в поиск и нашёл статью.

На уровне генов что-ли заложено неиспользование поиска?
Самое печальное, что это я читал и это - не решение... Я не могу отказаться от передачи, либо объекта, либо хэндла... форма должна быть в длл и модальна относительно отображаемого окна....
Последний раз редактировалось Vovik 13.12.2011 (Вт) 10:03, всего редактировалось 1 раз.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Модальность окна

Сообщение Хакер » 13.12.2011 (Вт) 7:09

Лол. Тёмыча взывает. Ну взывай дальше, до посинения...

Сделай интерфейс IVovikForm, сделай такую TLB-шку. Потом имплементируй этот интерфейс в форме и передавай X As IVovikForm, а не x As Form.

И работай полностью через этот интерфейс.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Модальность окна

Сообщение Vovik » 13.12.2011 (Вт) 10:05

Хакер писал(а):Лол. Тёмыча взывает. Ну взывай дальше, до посинения...

Сделай интерфейс IVovikForm, сделай такую TLB-шку. Потом имплементируй этот интерфейс в форме и передавай X As IVovikForm, а не x As Form.

И работай полностью через этот интерфейс.

Большое спасибо за идею!!!


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 23

    TopList