powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Модальное окно с состоянием процесса
25 сообщений из 29, страница 1 из 2
Модальное окно с состоянием процесса
    #32367844
1) есть функция foo(), выполнение которой длится около 5 минут. функция находится не в Form_1

2) форма Form_1, которая содержит надпись:
"обработано x/total_x"
и кнопку "Отмена"

нужно сделать:

а) перед циклом в foo() нужно открывать Form_1 модально
б) при прохождении по циклу в foo() изменять значение x в Form_1
в) при нажатии на "Отмена" в Form_1 прерывать цикл

не подскажет ли кто-нибудь как это можно сделать ?

С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367851
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
автора) перед циклом в foo() нужно открывать Form_1 модально
Насколько я знаю, модально не получится. Код просто не пойдет дальше, пока она не закроется. Поэтому надо открывать просто PopUp, но не Modal.

авторб) при прохождении по циклу в foo() изменять значение x в Form_1
Forms!Form_!!Label1.Caption = "Hello"

авторв) при нажатии на "Отмена" в Form_1 прерывать цикл
Заводим глобальную переменную, меняем ее в событии кнопки формы и проверяем в цикле. Только внутри цикла должно стоять DoEvents.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367855
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж так сильно нужно иметь именно модальную форму - то и вызов этой тормознутой функции надо делать из формы (например, на событии Load)
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367856
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч писалНасколько я знаю, модально не получится. Код просто не пойдет дальше, пока она не закроется.

Если только не переместить содержимое foo() в OnOpen этой формы.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367857
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самопальный почти прогресс-бар? :)
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367858
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Веселая рекурсия через Form_1!!!
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367860
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или ее вызов. Но все равно опоздал. :)
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367861
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда уж содержимое цикла с объявлением всех переменных, которые нужны в цикле :)
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367862
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ошибаюсь, или Гетц по этому поводу тоже что-то предлагал?
По-моему в кукингсбук.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367879
Всем спасибо.

Я наверное буду писать код в OnLoad Form_1, так и "Отмену" легче контролировать

и еще один вопрос: насколько DoEvents тормозит работу ?
функция тормознутая из-за того что там данные берутся из Excel, с помощью sheet.Range()

С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367883
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторнасколько DoEvents тормозит работу ?
Не тормозит никак. Будет тормозить, если параллельно с этой программой будет запущено что-нибудь еще. Хотя тоже не факт.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367888
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoEvents переает управление операционной системе на обработку событий, которые накопились в очереди событий, пока выполнялся код в Аксессе. Т.е., грубо говоря, если не поставить DoEvents у тебя будет подобие невытесняющей многозадачности (это когда одна задача занимает все ресурсы и не отдает их до завершения своей работы, падла). Так было в Win 3.1 и иже с ней.

Еще проще: будет казаться, что Аксес завис.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367896
спасибо
я уже заметил что Access как-бы зависает, как раз из-за этого и возникла необходимость делать эту форму :)

тогда еще такой вопрос :)

делаю обработку в OnLoad Form_1

Form_1 должен модально вызываться из MainForm.
Как передать значение переменной из MainForm в Form_1 ? Я тут спрашивал несколько дней назад почему не работает конструкция типа (VBA говорил что форма не найдена):
Код: plaintext
1.
Forms!Form_!!Label1.Caption =  "Hello"  

мне объяснили что в Forms форма попадает только когда она открыта. Но мне нужно сначала передать переменную (имя excel-файла), а потом модально открывать форму. Могу конечно передать через какой-нибудь модуль, но кажется это не совсем верно

если проще: как сделать глобальную переменную :) (прощу прощения за столь примитивный вопрос, просто с VBA работаю недавно)

С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367898
да, кстати и еще такой вопрос:
как грамотные программисты открывают/закрывают формы. Я умею только :

DoCmd.Close()
или
DoCmd.OpenForm

С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367900
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
DoCmd.Close acForm, Me.Name
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367905
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это из серии:
"-Как программисты перезагружают компьтер мышкой?
-Поднимают мышку со стола и жмут ее на кнопку Ресет на системнике."

Глобальные переменные - попробуй Public.
Еще можно завести отдельную табличку и туда пихать.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367909
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, наверное, программист неграмотный, но окна обычно закрываю на щеколду, если ухожу надолго, или не закрываю совсем - пусть проветривается. :)

А если серьезно, то без разницы, как его закрывать. У акцесса есть куча своих особеностей. Поищи, например, недописанный фак по "экземплярам форм".

С одной стороны, форма - это обыкновенный класс. Вернее модуль класса.

Ты его можешь инициализировать, т.е. создать форму в памяти к-ра (set frm = nem form_myForm), и сделать ее frm.visible=true, а можешь сказать docmd.openform ... что, как ни странно, не равно предыдущему способу. Мало того, оказывается, у акцесса почему-то работает Form_МояФорма.visible=true при неоткрытой форме. Опять же, это более-менее расписано там же (в недописанном фак'е).

Резюме. Способ программного закрывания (зело хорошее слово, почти "поиелику азмъ есмь") акцесной формы в первую очередь зависит от способа ее открытия, а уж потом, например, от времени года.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367910
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
авторб) при прохождении по циклу в foo() изменять значение x в Form_1
авторНо мне нужно сначала передать переменную (имя excel-файла), а потом модально открывать форму
Нет ли здесь противоречия? Я-то давал ответ на первый стучай, т.е. когда форма открыта.

Кстати, еще один способ передать в форму параметр - это через OpenArgs (один из параметров команды OpenForm).
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367913
ТемныйЭто из серии:
"-Как программисты перезагружают компьтер мышкой?
-Поднимают мышку со стола и жмут ее на кнопку Ресет на системнике."

вопрос был важен для меня потому что если все нормальные программисты могут как-то сначала передавать переменные в форму, а потом открывать её (что-то типа UnloadedForms!Form_1!edt_xlsFile.Text="Hello", а потом её открывать :)) то это было бы удобнее чем использование глобальных переменных. Так вот мне и хотелось выяснить - может я форму не тем способом открываю :))

с глобальными переменными разобрался. теперь объявляю их в отдельном модуле как Public, а потом использую. Спасибо


Тимур Каримбаевнасколько DoEvents тормозит работу ?

Владимир СанычНе тормозит никак. Будет тормозить, если параллельно с этой программой будет запущено что-нибудь еще. Хотя тоже не факт.

ТемныйDoEvents переает управление операционной системе на обработку событий, которые накопились в очереди событий, пока выполнялся код в Аксессе. Т.е., грубо говоря, если не поставить DoEvents у тебя будет подобие невытесняющей многозадачности (это когда одна задача занимает все ресурсы и не отдает их до завершения своей работы, падла


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

С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367916
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Как передать значение переменной из MainForm в Form_1 ? Я тут спрашивал
>несколько дней назад почему не работает конструкция типа (VBA говорил что
>форма не найдена):

>Forms!Form_!!Label1.Caption = "Hello"

>мне объяснили что в Forms форма попадает только когда она открыта. Но мне
>нужно сначала передать переменную (имя excel-файла), а потом модально
>открывать форму. Могу конечно передать через какой-нибудь модуль, но
>кажется это не совсем верно

Если форма не открыта - ее "класс" не инициализирован, то нет такой формы, и нет такой переменной. Надо открыть ее через docmd, тогда и сможешь достучаться до контрола. В случае с переменной, описанной в модуле формы, она должна быть объявлена как публик (public). А лучше ее (переменную) объявить в каком-нибудь модуле (стандартном)...
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367918
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял. Каюсь. Неправильно рассказал.

Аксес висит - Винда идет.

Не обрабатыываются только события в Аксесе. Домой приду, еще веское слово Гетца сюда процитирую. :)
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367919
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя не будет DoEvents - ты не сможешть нажать на кнопку Отмена.
Но завершить процесс msaccess.exe - запросто.

Тут получается, что события не передаются нитям процесcа msaccess.exe
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367923
Владимир СанычНет ли здесь противоречия? Я-то давал ответ на первый стучай, т.е. когда форма открыта.

пост №480394
"Я наверное буду писать код в OnLoad Form_1, так и "Отмену" легче контролировать" :)

Владимир СанычКстати, еще один способ передать в форму параметр - это через OpenArgs (один из параметров команды OpenForm).

вот это уже очень интересно, сейчас смотрю

GeoЕсли форма не открыта - ее "класс" не инициализирован, то нет такой формы, и нет такой переменной. Надо открыть ее через docmd, тогда и сможешь достучаться до контрола. В случае с переменной, описанной в модуле формы, она должна быть объявлена как публик (public). А лучше ее (переменную) объявить в каком-нибудь модуле (стандартном)...

Спасибо, это я понял. Проблема была в том, что её надо сначала с помощью DoCmd открыть модально, а потом передать переменную, но если мы её открываем модально - код не идет дальше пока мы её не закроем :) и нет возможности передать переменную

Темный
Аксес висит - Винда идет.
Если у тебя не будет DoEvents - ты не сможешть нажать на кнопку Отмена.
Но завершить процесс msaccess.exe - запросто.
Спасибо. Вопрос у меня теперь в том - насколько DoEvents тормозит работу самого цикла в MsAccess


С уважением, Каримбаев Тимур
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367925
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>если все нормальные программисты могут как-то сначала передавать
>переменные в форму, а потом открывать её
>(что-то типа UnloadedForms!Form_1!edt_xlsFile.Text="Hello", а потом её
>открывать :)) то это было бы удобнее чем использование глобальных
>переменных. Так вот мне и хотелось выяснить - может я форму не тем
>способом открываю :))

Не знаю как все, я обычно пользуюсь глобальными переменными. Есть еще параметры (последний аргумент docmd.openform).

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

Нет. Большинство даже простейших команд vba работают куда медленнее "сложных" (а-ля "перерисовать форму") функций самого виндовса.
...
Рейтинг: 0 / 0
Модальное окно с состоянием процесса
    #32367926
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ненамного - ответ устроит?
Проще всего самому сравнить.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Модальное окно с состоянием процесса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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