|
|
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Возникла проблема и я естественно тут, прошу совета. Кто может, помогите..........советом. У меня есть формочка склада, через неё делаются все важные операции. Среди них есть операция вывода на печать, вернее формирование и выброс вордовского документа на печать. При этом, процесс формирования долог и во время выполнения нужно форму-то и заблокировать. При этом я выбрасываю перед ней окно, без контролбокса, чисто прямоугольник, не переместить, ни изменить размер, ничего. Просто форма с меточкой, а в ней разъясняющий текст, что происходит с прогой. Ну, типа сообщение: "Идёт формирование документа. Обождите!" Типичный приём. Такие приёмы есть во многих крупных программных проектах. Так вот прошу отозваться. Я эту форму выбрасываю, формирую сначала невидимо документ, при этом показываю формочку, которая говорит, что идёт оформление ждите, а потом показываю уже готовый док, выгрузив формочку Unload'ом. Но эта формочка должна быть как Топформа и висеть, но я сделал её только ДиалогОкном, и фокус можно передавать основной форме, что неприемлемо. Идея такая. При активации основной формы проверять открыта ли предупреждалка, и передавать фокус ей, или на время сделать форму недееспособной Enabled=False. Благодарю за внимание, если у кого сил хватило дочитать, а я побежал за сметанкой! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2007, 12:04 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
А че модальной нельзя сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 00:50 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
nrmBeginnerА че модальной нельзя сделать? Нельзя, так как модальное окно открывается и тормозит выполнение процедуры, пока не будет оно закрыто, выполнение операторов после вызова этого окна невозможно. Этот эффект ты применяешь, если вызываешь функции InputBox и MsgBox. А мне надо, чтобы окно с сообщением о процессе выводилось и продожился бы процесс оформления дока, но окно было видно до завершения процесса, и при самом-самом завершении только тогда закрылось. И пока идёт процесс и видно окно, основная форма должна бездействовать, т. е. пользователь к ней доступа иметь не должен. Это типичный приём, когда в крупных проектах выполняются длительные процессы и доступа к основной проге нет, а видно лишь сообщение о выполнении процесса: типа копирования дисков в Неро или экспорт баз данных, или загрузка почты с серверов в Аутлуке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 11:04 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
Ден ПрограммёрНельзя, так как модальное окно открывается и тормозит выполнение процедуры, пока не будет оно закрыто, выполнение операторов после вызова этого окна невозможно.Справедливо, но не важно. Можно процедуру вызвать и из самогО модального окна. Обычно так и делается. Если это конечно не MsgBox. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 12:03 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
Antonariy Ден ПрограммёрНельзя, так как модальное окно открывается и тормозит выполнение процедуры, пока не будет оно закрыто, выполнение операторов после вызова этого окна невозможно.Справедливо, но не важно. Можно процедуру вызвать и из самогО модального окна. Обычно так и делается. Если это конечно не MsgBox. Не знаю, не знаю, от того и прошу совета Это абсолютно не MsgBox и уж тем более не InputBox, что я вывожу, так это обычная маленькая формочка с меточкой, посреди экрана. В меточке выводиться текст, типа такого:"Пожалуйста подождите! Идёт оформление документа". Вариант сделать сообщалку модальной с вызовом процесса оформления из модального окна мало подходит, так как окно одно, а процессов оформления много и все абсолютно разные и данные берут из основного окна и формируют доки по разным алгоритмам и изначально уже сильно привязаны к основному окну. Моя мысль пока проста, полазить по АПИ и найти те, что управляют поведением формы, или проще, во время вызова процесса Дееспособить основную форму и выбрасывать окно-сообщение, с упоминанием, что происход в данный момент, и при завершении процесса закрывать сообщалку и снова Способить основное окно. Хотя книгу про АПИ я всё же прикуплю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2007, 12:55 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
По Бэйсику заодно прикупи :) Держи халявщик: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 13:00 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
nrmBeginnerПо Бэйсику заодно прикупи :) Держи халявщик: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. СПАСИБО! Но я опять не упущу момента тыкнуть человека, который хотел мне помочь, если вы почитаете мои предложения в предыдущих сообщениях, то именно эту идею я и предлагал изначально: открыть окно как немодальное (оно стоит по умолчанию и обозначается вспомогательной именованной константой vbModeless = 0, в её противоположность есть константа vbModal = 1, при которой окно открывается модально и тормозит ход процедуры до её выгрузки), вторым этапом (хотя это стоит сделать первым этапом), после открытия сделать основную форму Бездейственной, изменив соответсвующее свойство Enabled с True на False и при завершении процесса формирования документа вернуть всё на свои места (Сообщалку выгрузить с глаз долой, а основной форме вернуть её дееспособность. Или я так плохо всё расписал? Или вы себя столь умным считаете? Хотя после определённого эксперимента, всё же выяснил, что Сообщалку сделать лучше модальной, а процесс формирования документа перенести из основной формы в обработчик событий этой формы.Как и предложил Антонарий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 15:20 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
Если делать по уму, то я бы предложил нижеследующий вариант: 1) Описывается интерфейс для классов, в которых будут формироваться отчеты. 2) При создании нового отчета создается класс наследующий данный интерфейс (инструкция Implements). 3) В модальную форму-заглушку при ее вызове передается экземпляр класса наследующего интерфейс. 4) В форме-заглушке вызывается метод описанный в интерфейсе. Преимущества описанного метода: - Для каждого отчета будет создан отдельный класс, что позволит не запутаться при большом количестве отчетов. - Не нужно делать диспечетчеризации отчетов с бесконечным Select Case (увы, но в VB нет указателей на функции). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 17:35 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
AMShЕсли делать по уму, то я бы предложил нижеследующий вариант: Спасибо и Вам, но я пока не силён во всех этих ООП припиндосах, посему, для 3 отчётов мне легче создать на уровне формы-заглушки(сообщалки) три разных процедуры, и при вызове этой формы передавать индекс отчёта и, перебирая их Select Case, вызывать нужную процедуру. А можно вопрос, может подкините примерчик с подобными объектами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 18:09 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
Сваял на скорую руку пример, надеюсь поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 15:35 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
AMShСваял на скорую руку пример, надеюсь поможет. Спасибо, спасибо, хотя я лично там ничего не разобрал. Что ты имеешь в виду, под понятием интерфейс. Интерфейс вещь растяжимая, у одних это сама форма, у других вилка электрическая, у третьих розетка (интерфейс вилки с розеткой), у четвёртых там ещё чего, можно ведь писать простыми понятными словами: процедура программного формирования документа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 18:11 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
Интерфейс в ООП, как я его понимаю, есть способ общения класса с другими классами :). То бишь методы, свойства события. В моем примере есть класс IReport, который является описанием интерфейса (в данном случае это только метод Init, но ничто не мешает добавить другие методы и свойства). Классы ReportSklad и ReportOrder наследуют интерфейс от класса IReport, то есть обязуются содержать описанные в IReport методы и свойства. Таким образом, передавая экземпляр класса ReportSklad в dlgWait как класс IReport, мы добиваемся того, что можем к нему обратиться к нему через метод Init. То же самое с ReportOrder или любым другим классом отчетов, который унаследует интерфейс от IReport. Реализацию ООП в VB6, к сожалению, нельзя назвать полноценной*, но это на значит, что ей нельзя пользоваться, если это удобно :). * К примеру, события в отличии от методов и свойств в VB6 не наследуются. Что бывает весьма раздражительно :(. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2007, 20:13 |
|
||
|
Модально-не-Модаль вот в чём собака порылась ...
|
|||
|---|---|---|---|
|
#18+
AMSh В общем, ничего не понял, надо ООП разбирать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2007, 10:24 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34644800&tid=2162821]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 370ms |

| 0 / 0 |
