powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Модально-не-Модаль вот в чём собака порылась ...
14 сообщений из 14, страница 1 из 1
Модально-не-Модаль вот в чём собака порылась ...
    #34631694
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Возникла проблема и я естественно тут, прошу совета.
Кто может, помогите..........советом.

У меня есть формочка склада, через неё делаются все важные операции.
Среди них есть операция вывода на печать, вернее формирование и выброс вордовского документа на печать. При этом, процесс формирования долог и во время выполнения нужно форму-то и заблокировать. При этом я выбрасываю перед ней окно, без контролбокса, чисто прямоугольник, не переместить, ни изменить размер, ничего. Просто форма с меточкой, а в ней разъясняющий текст, что происходит с прогой. Ну, типа сообщение: "Идёт формирование документа. Обождите!" Типичный приём. Такие приёмы есть во многих крупных программных проектах. Так вот прошу отозваться. Я эту форму выбрасываю, формирую сначала невидимо документ, при этом показываю формочку, которая говорит, что идёт оформление ждите, а потом показываю уже готовый док, выгрузив формочку Unload'ом.
Но эта формочка должна быть как Топформа и висеть, но я сделал её только ДиалогОкном, и фокус можно передавать основной форме, что неприемлемо. Идея такая. При активации основной формы проверять открыта ли предупреждалка, и передавать фокус ей, или на время сделать форму недееспособной Enabled=False.
Благодарю за внимание, если у кого сил хватило дочитать, а я побежал за сметанкой!
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34633654
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А че модальной нельзя сделать?
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34634199
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginnerА че модальной нельзя сделать?

Нельзя, так как модальное окно открывается и тормозит выполнение процедуры, пока не будет оно закрыто, выполнение операторов после вызова этого окна невозможно. Этот эффект ты применяешь, если вызываешь функции InputBox и MsgBox. А мне надо, чтобы окно с сообщением о процессе выводилось и продожился бы процесс оформления дока, но окно было видно до завершения процесса, и при самом-самом завершении только тогда закрылось. И пока идёт процесс и видно окно, основная форма должна бездействовать, т. е. пользователь к ней доступа иметь не должен. Это типичный приём, когда в крупных проектах выполняются длительные процессы и доступа к основной проге нет, а видно лишь сообщение о выполнении процесса: типа копирования дисков в Неро или экспорт баз данных, или загрузка почты с серверов в Аутлуке
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34634442
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ден ПрограммёрНельзя, так как модальное окно открывается и тормозит выполнение процедуры, пока не будет оно закрыто, выполнение операторов после вызова этого окна невозможно.Справедливо, но не важно. Можно процедуру вызвать и из самогО модального окна. Обычно так и делается. Если это конечно не MsgBox.
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34634659
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy Ден ПрограммёрНельзя, так как модальное окно открывается и тормозит выполнение процедуры, пока не будет оно закрыто, выполнение операторов после вызова этого окна невозможно.Справедливо, но не важно. Можно процедуру вызвать и из самогО модального окна. Обычно так и делается. Если это конечно не MsgBox.

Не знаю, не знаю, от того и прошу совета
Это абсолютно не MsgBox и уж тем более не InputBox, что я вывожу, так это обычная маленькая формочка с меточкой, посреди экрана. В меточке выводиться текст, типа такого:"Пожалуйста подождите! Идёт оформление документа". Вариант сделать сообщалку модальной с вызовом процесса оформления из модального окна мало подходит, так как окно одно, а процессов оформления много и все абсолютно разные и данные берут из основного окна и формируют доки по разным алгоритмам и изначально уже сильно привязаны к основному окну.
Моя мысль пока проста, полазить по АПИ и найти те, что управляют поведением формы, или проще, во время вызова процесса Дееспособить основную форму и выбрасывать окно-сообщение, с упоминанием, что происход в данный момент, и при завершении процесса закрывать сообщалку и снова Способить основное окно.

Хотя книгу про АПИ я всё же прикуплю
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34640720
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По Бэйсику заодно прикупи :)

Держи халявщик:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Command1_Click()
    Form2.Show  0 , Form1
    Me.Enabled = False
    Beep ' Дальше твой код будет работать без остановок,
           'а вторая форма будет вести себя как обсолютно модальная
           ' Только не забудь потом при возврате из второй формы
           'вернуть статус Enabled первой формы
End
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34641330
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nrmBeginnerПо Бэйсику заодно прикупи :)

Держи халявщик:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Command1_Click()
    Form2.Show  0 , Form1
    Me.Enabled = False
    Beep ' Дальше твой код будет работать без остановок,
           'а вторая форма будет вести себя как обсолютно модальная
           ' Только не забудь потом при возврате из второй формы
           'вернуть статус Enabled первой формы
End



СПАСИБО!
Но я опять не упущу момента тыкнуть человека, который хотел мне помочь, если вы почитаете мои предложения в предыдущих сообщениях, то именно эту идею я и предлагал изначально: открыть окно как немодальное (оно стоит по умолчанию и обозначается вспомогательной именованной константой vbModeless = 0, в её противоположность есть константа vbModal = 1, при которой окно открывается модально и тормозит ход процедуры до её выгрузки), вторым этапом (хотя это стоит сделать первым этапом), после открытия сделать основную форму Бездейственной, изменив соответсвующее свойство Enabled с True на False и при завершении процесса формирования документа вернуть всё на свои места (Сообщалку выгрузить с глаз долой, а основной форме вернуть её дееспособность. Или я так плохо всё расписал? Или вы себя столь умным считаете? Хотя после определённого эксперимента, всё же выяснил, что Сообщалку сделать лучше модальной, а процесс формирования документа перенести из основной формы в обработчик событий этой формы.Как и предложил Антонарий.
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34641961
AMSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если делать по уму, то я бы предложил нижеследующий вариант:

1) Описывается интерфейс для классов, в которых будут формироваться отчеты.
2) При создании нового отчета создается класс наследующий данный интерфейс (инструкция Implements).
3) В модальную форму-заглушку при ее вызове передается экземпляр класса наследующего интерфейс.
4) В форме-заглушке вызывается метод описанный в интерфейсе.

Преимущества описанного метода:
- Для каждого отчета будет создан отдельный класс, что позволит не запутаться при большом количестве отчетов.
- Не нужно делать диспечетчеризации отчетов с бесконечным Select Case (увы, но в VB нет указателей на функции).
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34642096
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AMShЕсли делать по уму, то я бы предложил нижеследующий вариант:


Спасибо и Вам, но я пока не силён во всех этих ООП припиндосах, посему, для 3 отчётов мне легче создать на уровне формы-заглушки(сообщалки) три разных процедуры, и при вызове этой формы передавать индекс отчёта и, перебирая их Select Case, вызывать нужную процедуру.
А можно вопрос, может подкините примерчик с подобными объектами.
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34644261
AMSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сваял на скорую руку пример, надеюсь поможет.
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34644800
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AMShСваял на скорую руку пример, надеюсь поможет.

Спасибо, спасибо, хотя я лично там ничего не разобрал.
Что ты имеешь в виду, под понятием интерфейс. Интерфейс вещь растяжимая, у одних это сама форма, у других вилка электрическая, у третьих розетка (интерфейс вилки с розеткой), у четвёртых там ещё чего, можно ведь писать простыми понятными словами: процедура программного формирования документа.
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34645036
AMSh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интерфейс в ООП, как я его понимаю, есть способ общения класса с другими классами :). То бишь методы, свойства события.

В моем примере есть класс IReport, который является описанием интерфейса (в данном случае это только метод Init, но ничто не мешает добавить другие методы и свойства). Классы ReportSklad и ReportOrder наследуют интерфейс от класса IReport, то есть обязуются содержать описанные в IReport методы и свойства.

Таким образом, передавая экземпляр класса ReportSklad в dlgWait как класс IReport, мы добиваемся того, что можем к нему обратиться к нему через метод Init. То же самое с ReportOrder или любым другим классом отчетов, который унаследует интерфейс от IReport.

Реализацию ООП в VB6, к сожалению, нельзя назвать полноценной*, но это на значит, что ей нельзя пользоваться, если это удобно :).

* К примеру, события в отличии от методов и свойств в VB6 не наследуются. Что бывает весьма раздражительно :(.
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #34645334
Ден Программёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AMSh

В общем, ничего не понял, надо ООП разбирать
...
Рейтинг: 0 / 0
Модально-не-Модаль вот в чём собака порылась ...
    #35062176
Фотография Mix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классная штука! Мне понравился способ.


Не корысти ради, а токмо во имя поиска благодати.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Модально-не-Модаль вот в чём собака порылась ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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