Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
StepInLik
1063 / 101 / 4
Регистрация: 19.12.2012
Сообщений: 439
1

В момент отработки виндового таймера

22.05.2013, 13:27. Просмотров 531. Ответов 1
Метки нет (Все метки)

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

Но ...
Как показало время - есть и недостатки.
1. Представьте, что пользователь начал редактировать какую-то ячейку, отрабатывает таймер и как ни в чем не бывало выводит на этот же лист данные. Первое, что происходит - он прерывается диалог процесса ввода данных пользователя. Т.е. если пользователь вводил фразу "манная каша" и ввел пока только слово "манная", то после отработки таймера и какого-то изменения какой-то другой ячейки(этим таймером) - процесс ввода прекратится и в ячейке появится "манная". Второе, что произойдет - это то, что пользователь не зная первого события (глядя только на клавиатуру) продолжит ввод данных и затрет рабочую ячейку со словом "манная" на " каша" ... а потом будет долго вам доказывать, что все делал верно.
2. Если таймер не выводит данные на лист(в отличие от п.1). Но! на некоторых компьютерах(пока по неустановленной причине) если пользователь вводит какую-то формулу (к примеру ВПР) то в процессе ее ввода в момент отработки таймера - приложение исчезает, словно его и не было. Так вот - бац и все - нет экселя! Видимо какие-то процессы, обеспечивающие проверку и работу пользователя с формулой не совместимы с работой интерпретатора. (если идет ввод не формулы - таких проблем не бывает)

Вопрос: кто может подсказать - "как определять - находится ли пользователь в процессе редактирования ячейки и с какой именно?"
ЗЫ Все события отрабатывают потом - после завершения редактирования, а вот как определить само редактирование в сам момент редактирования?
(к примеру, это позволило бы пробовать сразу выходить из функции по вызову (тика) таймера)

Добавлено через 2 часа 15 минут
Пока есть 2 варианта:
1.
Вешать 2 таймера (1 на OnTime). Его особенность в том, что в режиме работы с ячейкой OnTime не вызывается.
И так. Вешаем OnTime на каждую секунду и проверяем при вызове обычного таймера - есть ли вызов OnTim'а в прошлую секунду. Если его не было, то с БОЛЬШОЙ долей вероятности(случай сильной загрузки проца скорее всего даст исключение) идет работа с ячейкой. Если это так - виндовый таймер или выключать сразу(и включать в следующий вызов OnTime) или сразу выходить из обработчика.
2.
Слушать хуки. Как только пошла работа с окном (за исключением каких-то конкретных горячих клавиш) - пошла работа с ячейкой. Конец работы с ячейкой - событие изменения ячейки на листе. В этот период - выходим из виндового таймера.

... но ни один из этих вариантов 100% гарантии не дает. можно их совмещать конечно.
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 13:27
Ответы с готовыми решениями:

Не меняется title после отработки таймера
$(window).focus(function (e) { $("#message").attr('alt', "visible"); ...

В определенный момент отработки программы мне нужно проверить существует ли на сервере определенная временная таблица
Добрый всем день!!!! У меня следующая проблема. В определенный момент отработки программы мне...

Как реализовать этот момент: текстовое поле для задания временного отрезка работы таймера и шага срабатывания?
Нужно продемонстрировать работу элемента ProgressBar . Для этого добавить на форму таймер ,...

Аналог виндового калькулятора
Не знаю, реально ли это сделать без создания своих форм и/или библиотек, но всё же. Реально ли...

Запуск таски из виндового с шедулера с максимальными правами
Всем доброго времени суток. Возникла следующая проблема. Есть cmd-файл на виндовом сервере,...

1
StepInLik
1063 / 101 / 4
Регистрация: 19.12.2012
Сообщений: 439
28.05.2013, 12:29  [ТС] 2
Коллега с другого форума ZVI предложил 100% (уже) работающее решение:
>Состояние редактирования ячейки/формулы можно определять по свойству Enabled какой-нибудь кнопки меню, например: Файл - Создать
>Это делается так: Application.CommandBars.FindControl(ID:=1 8) .Enabled

Спасибо.
Тема закрыта.
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2013, 12:29

Каков вращающий момент, действующий на маховик, если момент сил трения в подшипниках 0,2 Нм
Маховик, имеющий форму диска, массой 35кг и диаметром 60 см через 3 с после включения мотора...

Найти момент сил M, действующие на шар в момент времени t =2 с после начала движения
Шар, радиус которого 15 R= см, масса 5 m= кг, движется вокруг неподвижной оси, проходящей через...

Определить момент силы торможения, если момент инерции маховика равен 1кг/м^2
маховик делал 10 оборотов в секунду,при торможении он остановился,сделав 30 оборотов от начало...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.