Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пока Excel считает, как сделать, чтобы кнопки рабо 
:(
    Опции темы
price
Дата 3.6.2008, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.6.2008

Репутация: нет
Всего: нет



Здравствуйте всем. Подскажите, пожалуйста, как сделать, чтобы текст на кнопке менялся раз в секунду(чтобы было видно, что текст меняется) (предположим, циферки бежали на кнопке 1,2,3,4...), пока на эту кнопку не нажмёшь.


Вот 10% моего кода.


Private Sub CommandButton1_Click()
    If run25 = True Then
        CommandButton1.Caption = "stopped"
        run25 = False
        Else
            While (True)
                i = i+1
                CommandButton1.Caption = i
            Wend
    End If
End Sub

Что и где нужно менять и добавлять? 
Одновременно, подскажите, пожалуйста, как сделать, чтобы кушалось не 100% процессорного времени, а гораздо меньше.

Заранее спасибо.
PM MAIL   Вверх
RockClimber
Дата 3.6.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Между While и Wend поставить DoEvents? Сам я этой командой не пользовался (необходимости не было), но вроде она для таких случаев...

Добавлено через 56 секунд
Кстати, а ничего, что цикл у вас бесконечный получается??? (в такой записи)


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
price
Дата 3.6.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 3.6.2008

Репутация: нет
Всего: нет



Большущее спасибо!!!!

Цикл - верно, бегает, для меня заковырка, как правильно его останавливать. Сделал процедуру вот такую, она работает. Только лишь подскажите, пожалуйста, грамотно ли с точки зрения написания кода (не лишь бы тяп-ляп, а чтобы грамотно):

Private Sub CommandButton1_Click()
    If run25 = True Then
        CommandButton1.Caption = "stopped"
        run25 = False
        Else
            run25 = True
            Randomize
            While (run25)
                DoEvents
                i = i+1
                CommandButton1.Caption = i
            Wend
    End If
End Sub

Работает код и из While оно выходит, потому что по очередному нажатию на кнопку, оно входит в процедуру CommandButton1_Click и значение run25 меняется на False.
Легко ли догадаться до такой реализации, элегантная это реализация или безграмотная? 

Спасибо.

Это сообщение отредактировал(а) price - 3.6.2008, 23:47
PM MAIL   Вверх
Naghual
Дата 4.6.2008, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 7
Всего: 49



Все верно, при условии что переменные run25 и i были объявлены ранее на уровне модуля.


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Akina
Дата 4.6.2008, 00:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



If run25 = True Then эквивалентно If run25 Then
Вместо Randomize, возможно, надо использовать Randomize Timer - иначе всегда генерится одна и та же последовательность.
Цитата(price @  4.6.2008,  00:46 Найти цитируемый пост)
элегантная это реализация или безграмотная?

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
RockClimber
Дата 4.6.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: 7
Всего: 15



Цитата(price @  3.6.2008,  23:46 Найти цитируемый пост)
Цикл - верно, бегает, для меня заковырка, как правильно его останавливать

Обычно делают так, чтобы переменная, от значения которой зависит выход из цикла, менялась в самом цикле, а не неизвестно где и при каких обстоятельствах.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.