|
|
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
1) есть функция foo(), выполнение которой длится около 5 минут. функция находится не в Form_1 2) форма Form_1, которая содержит надпись: "обработано x/total_x" и кнопку "Отмена" нужно сделать: а) перед циклом в foo() нужно открывать Form_1 модально б) при прохождении по циклу в foo() изменять значение x в Form_1 в) при нажатии на "Отмена" в Form_1 прерывать цикл не подскажет ли кто-нибудь как это можно сделать ? С уважением, Каримбаев Тимур ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 12:46 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
автора) перед циклом в foo() нужно открывать Form_1 модально Насколько я знаю, модально не получится. Код просто не пойдет дальше, пока она не закроется. Поэтому надо открывать просто PopUp, но не Modal. авторб) при прохождении по циклу в foo() изменять значение x в Form_1 Forms!Form_!!Label1.Caption = "Hello" авторв) при нажатии на "Отмена" в Form_1 прерывать цикл Заводим глобальную переменную, меняем ее в событии кнопки формы и проверяем в цикле. Только внутри цикла должно стоять DoEvents. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:29 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Если уж так сильно нужно иметь именно модальную форму - то и вызов этой тормознутой функции надо делать из формы (например, на событии Load) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:37 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Владимир Саныч писалНасколько я знаю, модально не получится. Код просто не пойдет дальше, пока она не закроется. Если только не переместить содержимое foo() в OnOpen этой формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:39 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Самопальный почти прогресс-бар? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:39 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Веселая рекурсия через Form_1!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:41 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Или ее вызов. Но все равно опоздал. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:41 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Тогда уж содержимое цикла с объявлением всех переменных, которые нужны в цикле :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:42 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Я ошибаюсь, или Гетц по этому поводу тоже что-то предлагал? По-моему в кукингсбук. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 13:43 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Всем спасибо. Я наверное буду писать код в OnLoad Form_1, так и "Отмену" легче контролировать и еще один вопрос: насколько DoEvents тормозит работу ? функция тормознутая из-за того что там данные берутся из Excel, с помощью sheet.Range() С уважением, Каримбаев Тимур ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 14:46 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
авторнасколько DoEvents тормозит работу ? Не тормозит никак. Будет тормозить, если параллельно с этой программой будет запущено что-нибудь еще. Хотя тоже не факт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 14:50 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
DoEvents переает управление операционной системе на обработку событий, которые накопились в очереди событий, пока выполнялся код в Аксессе. Т.е., грубо говоря, если не поставить DoEvents у тебя будет подобие невытесняющей многозадачности (это когда одна задача занимает все ресурсы и не отдает их до завершения своей работы, падла). Так было в Win 3.1 и иже с ней. Еще проще: будет казаться, что Аксес завис. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 14:54 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
спасибо я уже заметил что Access как-бы зависает, как раз из-за этого и возникла необходимость делать эту форму :) тогда еще такой вопрос :) делаю обработку в OnLoad Form_1 Form_1 должен модально вызываться из MainForm. Как передать значение переменной из MainForm в Form_1 ? Я тут спрашивал несколько дней назад почему не работает конструкция типа (VBA говорил что форма не найдена): Код: plaintext 1. мне объяснили что в Forms форма попадает только когда она открыта. Но мне нужно сначала передать переменную (имя excel-файла), а потом модально открывать форму. Могу конечно передать через какой-нибудь модуль, но кажется это не совсем верно если проще: как сделать глобальную переменную :) (прощу прощения за столь примитивный вопрос, просто с VBA работаю недавно) С уважением, Каримбаев Тимур ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:07 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
да, кстати и еще такой вопрос: как грамотные программисты открывают/закрывают формы. Я умею только : DoCmd.Close() или DoCmd.OpenForm С уважением, Каримбаев Тимур ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:09 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
DoCmd.Close acForm, Me.Name ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:10 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Это из серии: "-Как программисты перезагружают компьтер мышкой? -Поднимают мышку со стола и жмут ее на кнопку Ресет на системнике." Глобальные переменные - попробуй Public. Еще можно завести отдельную табличку и туда пихать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:19 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Я, наверное, программист неграмотный, но окна обычно закрываю на щеколду, если ухожу надолго, или не закрываю совсем - пусть проветривается. :) А если серьезно, то без разницы, как его закрывать. У акцесса есть куча своих особеностей. Поищи, например, недописанный фак по "экземплярам форм". С одной стороны, форма - это обыкновенный класс. Вернее модуль класса. Ты его можешь инициализировать, т.е. создать форму в памяти к-ра (set frm = nem form_myForm), и сделать ее frm.visible=true, а можешь сказать docmd.openform ... что, как ни странно, не равно предыдущему способу. Мало того, оказывается, у акцесса почему-то работает Form_МояФорма.visible=true при неоткрытой форме. Опять же, это более-менее расписано там же (в недописанном фак'е). Резюме. Способ программного закрывания (зело хорошее слово, почти "поиелику азмъ есмь") акцесной формы в первую очередь зависит от способа ее открытия, а уж потом, например, от времени года. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:23 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
авторб) при прохождении по циклу в foo() изменять значение x в Form_1 авторНо мне нужно сначала передать переменную (имя excel-файла), а потом модально открывать форму Нет ли здесь противоречия? Я-то давал ответ на первый стучай, т.е. когда форма открыта. Кстати, еще один способ передать в форму параметр - это через OpenArgs (один из параметров команды OpenForm). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:23 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
ТемныйЭто из серии: "-Как программисты перезагружают компьтер мышкой? -Поднимают мышку со стола и жмут ее на кнопку Ресет на системнике." вопрос был важен для меня потому что если все нормальные программисты могут как-то сначала передавать переменные в форму, а потом открывать её (что-то типа UnloadedForms!Form_1!edt_xlsFile.Text="Hello", а потом её открывать :)) то это было бы удобнее чем использование глобальных переменных. Так вот мне и хотелось выяснить - может я форму не тем способом открываю :)) с глобальными переменными разобрался. теперь объявляю их в отдельном модуле как Public, а потом использую. Спасибо Тимур Каримбаевнасколько DoEvents тормозит работу ? Владимир СанычНе тормозит никак. Будет тормозить, если параллельно с этой программой будет запущено что-нибудь еще. Хотя тоже не факт. ТемныйDoEvents переает управление операционной системе на обработку событий, которые накопились в очереди событий, пока выполнялся код в Аксессе. Т.е., грубо говоря, если не поставить DoEvents у тебя будет подобие невытесняющей многозадачности (это когда одна задача занимает все ресурсы и не отдает их до завершения своей работы, падла так вот мне и хочется выяснить: если одна задача (например мой цикл) "занимает все ресурсы и не отдает их до завершения своей работы", так может она и выполнится в несколько раз быстрее чем если каждый раз внутри цикла её будут прерывать и заставлять перерисовывать форму. С уважением, Каримбаев Тимур ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:33 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
>Как передать значение переменной из MainForm в Form_1 ? Я тут спрашивал >несколько дней назад почему не работает конструкция типа (VBA говорил что >форма не найдена): >Forms!Form_!!Label1.Caption = "Hello" >мне объяснили что в Forms форма попадает только когда она открыта. Но мне >нужно сначала передать переменную (имя excel-файла), а потом модально >открывать форму. Могу конечно передать через какой-нибудь модуль, но >кажется это не совсем верно Если форма не открыта - ее "класс" не инициализирован, то нет такой формы, и нет такой переменной. Надо открыть ее через docmd, тогда и сможешь достучаться до контрола. В случае с переменной, описанной в модуле формы, она должна быть объявлена как публик (public). А лучше ее (переменную) объявить в каком-нибудь модуле (стандартном)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:36 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Понял. Каюсь. Неправильно рассказал. Аксес висит - Винда идет. Не обрабатыываются только события в Аксесе. Домой приду, еще веское слово Гетца сюда процитирую. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:38 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Если у тебя не будет DoEvents - ты не сможешть нажать на кнопку Отмена. Но завершить процесс msaccess.exe - запросто. Тут получается, что события не передаются нитям процесcа msaccess.exe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:40 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
Владимир СанычНет ли здесь противоречия? Я-то давал ответ на первый стучай, т.е. когда форма открыта. пост №480394 "Я наверное буду писать код в OnLoad Form_1, так и "Отмену" легче контролировать" :) Владимир СанычКстати, еще один способ передать в форму параметр - это через OpenArgs (один из параметров команды OpenForm). вот это уже очень интересно, сейчас смотрю GeoЕсли форма не открыта - ее "класс" не инициализирован, то нет такой формы, и нет такой переменной. Надо открыть ее через docmd, тогда и сможешь достучаться до контрола. В случае с переменной, описанной в модуле формы, она должна быть объявлена как публик (public). А лучше ее (переменную) объявить в каком-нибудь модуле (стандартном)... Спасибо, это я понял. Проблема была в том, что её надо сначала с помощью DoCmd открыть модально, а потом передать переменную, но если мы её открываем модально - код не идет дальше пока мы её не закроем :) и нет возможности передать переменную Темный Аксес висит - Винда идет. Если у тебя не будет DoEvents - ты не сможешть нажать на кнопку Отмена. Но завершить процесс msaccess.exe - запросто. Спасибо. Вопрос у меня теперь в том - насколько DoEvents тормозит работу самого цикла в MsAccess С уважением, Каримбаев Тимур ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:43 |
|
||
|
Модальное окно с состоянием процесса
|
|||
|---|---|---|---|
|
#18+
>если все нормальные программисты могут как-то сначала передавать >переменные в форму, а потом открывать её >(что-то типа UnloadedForms!Form_1!edt_xlsFile.Text="Hello", а потом её >открывать :)) то это было бы удобнее чем использование глобальных >переменных. Так вот мне и хотелось выяснить - может я форму не тем >способом открываю :)) Не знаю как все, я обычно пользуюсь глобальными переменными. Есть еще параметры (последний аргумент docmd.openform). >если одна задача (например мой цикл) "занимает все ресурсы и не отдает их до >завершения своей работы", так может она и выполнится в несколько раз >быстрее чем если каждый раз внутри цикла её будут прерывать и заставлять >перерисовывать форму. Нет. Большинство даже простейших команд vba работают куда медленнее "сложных" (а-ля "перерисовать форму") функций самого виндовса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2004, 15:45 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1699&tid=1677366]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 400ms |

| 0 / 0 |
