powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сделать модальным экземпляр окна?
4 сообщений из 4, страница 1 из 1
Как сделать модальным экземпляр окна?
    #39360964
Volunteer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наткнулся на проблему: в приложении используется замена штатному MsgBox - класс Dialog, который сообщения создает через создание экземпляра класса окна:
Код: vbnet
1.
Dim f As New Form_frm_Dialog


Соответственно, хоть окно и имеет свойство Modal, но полностью модальным не является, если его создать поверх открытого Popup окна, то оно легко "уходит" под него при клике на Popup окне, а если такое окошко открыть в событии смены фокуса, то в большинстве случаев просто уходит од основное окно без дополнительных действий.
Если бы диалог создавался стандартным образом, через DoCmd.OpenForm с параметром acDialog, то таких проблем не возникало бы, но в данном случае нужна возможность открытия нескольких экземпляров окна.
Вопрос: как можно сделать окно полностью модальным внутри приложения, создавая его через экземпляр класса? Очень не хочется заморачиваться с таймером.
API позволит сменить тип окна "на ходу"?
...
Рейтинг: 0 / 0
Как сделать модальным экземпляр окна?
    #39360967
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volunteer, всё это здорово. Но возникает вопрос, а как ты собираешься открыть эти несколько экземпляров диалога? Диалоговое окно кроме того, что висит несколько выше всех остальных окон процесса в Z-последовательности, характеризуется прерыванием выполнения программы - кнопки не нажимаются, код породивший диалог - остановлен.
...
Рейтинг: 0 / 0
Как сделать модальным экземпляр окна?
    #39360968
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volunteer, так-то можешь поиграть с границей формы - "Тип границы" = "Окно диалога" . Может хватит тебе.
Или
VolunteerAPI позволит сменить тип окна "на ходу"?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
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_TOPMOST = -1' Помещает окно перед не самыми верхними окнами. Окно сохраняет свою самую верхнюю позицию даже тогда, когда оно неактивное.
' SetWindowPos Flags
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2

'где-то в коде...
SetWindowPos Me.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE 
...

Как-то так...
...
Рейтинг: 0 / 0
Как сделать модальным экземпляр окна?
    #39360973
Volunteer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панургтак-то можешь поиграть с границей формы - "Тип границы" = "Окно диалога" .

Помогло, перестало улетать вниз. Спасибо!

По мне, так я эту красивость вообще убрал бы, ничего кроме гемора не дает.
Замечание насчет нескольких экземпляров тоже верное, не откроешь несколько сообщений подряд, а из одного сообщения открывать другое не требуется. Поэтому вполне можно эту красоту переделать и на открытие стандартным образом. Через экземпляр сделали, как я понимаю, для облегчения передачи параметров в окно, но это легко решаемо другими методами.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сделать модальным экземпляр окна?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]