![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
t0r |
|
|||
Unregistered |
Здравствуйте все, кто не поленился это прочитать. Господа прошу помощи вот по какому вопросу. НА VBA в EXCEL-е написал процедуру (назову ее для примера copy-timer), выполняющую, условно непрерывный процесс (заполнение ячеек, по таймеру). На лист поместил кнопку "стоп". Очень бы хотелось, чтобы по нажатии этой кнопки процесс остановился, в условных обозначениях программа выглядела бы так:
sub copy-timer() <собственно сам процесс связанный с заполнением> if "стоп" нажата then exit sub' вопрос-как это описать? end sub Private Sub стоп_Click() End Sub По всей видимости это очень просто, но я что-то в ступор попал. Заранее благодарен. |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 10 Всего: 68 |
Попробуй так
Только учти что во времы выполнения цикла ты не можешь кнопки давить, разберись с DoEvents Удачи |
|||
|
||||
Alles |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 26.6.2003 Где: RUSSIA Репутация: 2 Всего: 2 |
Я чот не понял ?! тебе остановить заполнение нужно на время нажатия или ........как ?
если или как тогда внутри твоей процедуры можно обращатся к той- же кнопки с мотреть ие Caption. А принажатии на кнопку просто меняет свой Caption
Да и Fox прав про DoEvents на это обрати внимание ! Удачи! |
|||
|
||||
Alles |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 142 Регистрация: 26.6.2003 Где: RUSSIA Репутация: 2 Всего: 2 |
Да ..забыл по умалчанию Caption кнопки будет Стоп
|
|||
|
||||
Mephisto |
|
||||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Просто делай
|
||||
|
|||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 10 Всего: 68 |
U-Boot
Угу, это при условии что таймер компанент........а если это процедура или функция ![]() ![]() |
|||
|
||||
Mephisto |
|
||||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Ну а если всё-таки компонент, то:
|
||||
|
|||||
Unregistered |
|
|||
Unregistered |
Спасибо всем кто ответил. Так как все обсуждение стало уходить в сторону таймера и начинки процедуры - немного напомню: что приведенный пример скорее абстактен чем конкретен
![]() sub xxxx() end sub Private Sub CommandButton1_Click() ................................................<- здесь что нужно написать, чтобы 'xxxx' процедура остановилась? end sub |
|||
|
||||
~FoX~ |
|
|||
![]() НЕ рыжий!!! ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2819 Регистрация: 8.10.2003 Где: Зеленоград Репутация: 10 Всего: 68 |
Чем тебя не устроил мой пример? Вполне нормально останавливает........
|
|||
|
||||
cardinal |
|
||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
~FoX~, то что ты написал ничего вполне нормально не останавливает! Ты просто вызываешь процедуру по разному. Один раз ты ей говоришь, что надо что-то делать, а второй раз говоришь, что делать ничего не надо, но факт что вызыва было два остается. Unregistered надо остановить выполняющую, условно непрерывный процесс процедуру. Если мы сделаем то что предложил ты мы остановим только одну из вызванных процедур, а вторая будет "крутиться" как и крутилась ![]()
Я же предлашаю товарищу Unregistered во-первых, конечно, зарегистрироваться ![]()
Если ты будешь при этом смотреть в окно Debug`ера, то ты увидишь, что процедура останавливается. Может этот способ и не очень изящный, но зато ты имеешь кучу возможностей остановки своей процедуры. Я это придумал когда мне надо было организовать один страшный поток, который крутился паралельно с самой программой, а программа должна была им управлять. Успехов! -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||
|
|||||||
t0r |
|
|||
Unregistered |
Еще раз большое, как говорится, человеческое мерси, за участие в обсуждении. Насчет регистрености, - регистреный я, блин, просто спешил очень в прошлый раз вот и влетел на форсаже как "Unregistered "
|
|||
|
||||
cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
так ответ то тебя удолетворил или нет, а то мерси за участие, но вы все лапухи. ![]() p.s. но ты все равно Unregistred -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
t0r |
|
|||
Unregistered |
Да, ответ удовлетворил (поэтому и мерси)- все прозрачно и читаемо (это очень важно, т.к. блуждание по лабиринтам чужого сознания отнимает массу сил, и по итогу заводит в тупик).
Я вобщем, пока в деле-то не попробовал, но код читаем и суть ясна. Насчет введения 2-х кнопок: одна для старта, другая для стопа - правильно я понял? (этот вопрос потому, что вначале я одну кнопку вводил - только для стопа). Насчет изящности согласен - выглядит громоздковато ![]() P.S. на туже тему: чего-то действительно пишут мне, что я "Unregistered", странно, а парол высланный на мыло и все такое, опять же вроде не касячил - вобщем, типа свой я, отечественный ![]() |
|||
|
||||
cardinal |
|
||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 19 Всего: 99 |
Понял ты правильно. Но проблем сделать одну кнопку из двух тоже никаких нет. Вот тебе пример:
Нажал - запустилось, нажал еще раз - остановилось и т.д. Теперь насчет громоздкости. Так то это так, но дело в том что помоему в данном случае не тольк опроще использовать глобальную переменную, но и эффективней. Тут есть другой путь который можно обдумать. Можно попытаться останавливать твою процедуру event`ом, то есть событием, но как это делается в VB я пока не совсем понял. Я это никогда еще не использовал, но вот решил попробовать. В MSDN можно найти след. пример: RaiseEvent Statment Example The following example uses events to count off seconds during a demonstration of the fastest 100 meter race. The code illustrates all of the event-related methods, properties, and statements, including the RaiseEvent statement. The class that raises an event is the event source, and the classes that implement the event are the sinks. An event source can have multiple sinks for the events it generates. When the class raises the event, that event is fired on every class that has elected to sink events for that instance of the object. The example also uses a form (Form1) with a button (Command1), a label (Label1), and two text boxes (Text1 and Text2). When you click the button, the first text box displays "From Now" and the second starts to count seconds. When the full time (9.84 seconds) has elapsed, the first text box displays "Until Now" and the second displays "9.84" The code for Form1 specifies the initial and terminal states of the form. It also contains the code executed when events are raised.
The remaining code is in a class module named TimerState. Included among the commands in this module are the Raise Event statements.
Я его запустил и увидил, что как-то это все тормозит по страшному (но это наверно потому, что нет DoEvents, только в голову стукнуло, что я его забыл ![]() ![]() -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||
|
|||||||||
Vach |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 17.10.2003 Где: Санкт-Петербург Репутация: 8 Всего: 18 |
Можно все запихать в класс модуль
(собственно как и сделано в примере выше) 1. создайте стандартный проект 2. на форму поместите две кнопки 3. добавьте следующий код
4. Добавьте в проект class module и назовите его c_myLoop 5. В class module c_myLoop поместите следующий код
PS помните - это не отдельный процесс и его можно с успехом завесить я им пользуюсь когда надо обогнать таймер ![]() PSPS возможно текст излишне комментирован ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |