| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разное тестирование > Таймер |
| Автор: mr.Anderson 22.1.2006, 14:37 |
| Ну, потрясающе простая программочка. Просто я подумал, вдруг кому-нить надо будет засечь определенное время, сидя за компом. Вот и пригодится такая программочка. Она довольно проста, правда, объем кода сильно возрос из-за разных проверок... В общем, что программа делает. Все предельно просто. Вы вводите количество часов, минут, секунд и давите "Начать". Когда время закончится, программа скажет об этом. Особенности: 1. Учтена проверка на введение только цифр 2. Учтены проверки на пустоту, на нулевые значения, на отрицательные значения 3 (!) Если вводится количество секунд/минут больше 60, то это значение автоматически преобразуется в минуты (если секунд >60) или в часы (это если минут >60). Это, пожалуй, самое интересное в программе. Вот и все! Качайте, и плиз скажите, понравилось аль нет. Вот ссыль: http://my-projects.narod.ru/timer.rar |
| Автор: mr.Anderson 22.1.2006, 18:46 | ||
ОК, сейчас сделаю. Плюс добавлю возможность свернуть в трей, чтобы глаза не мозолил. |
| Автор: mr.Anderson 22.1.2006, 19:26 |
| Так. Возможность трея добавил (не пропустите маленькую кнопочку в правом нижнем углу окна программы Убирание сообщения об ошибке делать не стал, чтобы не утяжелять программу лишними 20 строчками кода. Вот ссыль на следующую версию: |
| Автор: Spawn™Production® 22.1.2006, 20:59 |
| Хм, работает, однако размер exe и так, мягко говоря, не маленький. Как мне кажется, что-то ты не так пишешь, либо пишешь много не нужного, так как я уверен, что в разы меньше могу размер сделать. |
| Автор: mr.Anderson 23.1.2006, 17:15 | ||
| У меня все вышло примерно в 120 строчек. Нет, я не сомневаюсь, что ВЫ можете сделать намного проще. А там очень много кода на разные проверки. Вот смотрите, что я включил в код, и оцените, сколько на это надо строк кода: 1. Запрет ввода всех символов кроме цифр (0-9). 2. События при нажатии на кнопку "Сброс времени". 3. События при нажатии на "Стоп" - в 2 и 3 пунктах идет отключение/включение кнопок/полей, что несет 12 строк кода. 4. Проверка на пустоту полей. 5. Перевод слишком больших значений секунд/минут в соответственно минуты/часы. 6. Дописывание "нулика" в метку. 7. Проверка на отрицательные значения. 8. Проверка на нулевые значения. 9. События на запуск таймера. 10. Собственно работа таймера, состоящая из 45 строчек кода, включающих в себя проверку на нулики перед числами из 1 цифры, остановку вовремя, исключение возможности пойти "в минус". Вот это примерно все. Вот и посчитайте, сколько на это все надо угрохать. Добавлено @ 17:20 Вообще, если хотите, я выложу тут код программы, мне не жалко. Можно ее заодно и разобрать, если вы позволите... Я, в общем, код выложу, если нельзя, то удалите его плиз.
|
| Автор: mr.Anderson 23.1.2006, 20:06 |
| Так-с, люди. Выпустил версию 1.3. Что нового: 1. Немножко подправлен код (сокращен на 5-6 строчек). 2. Добавлена фича: если програ была в трее, то когда отсчет времени заканчивается, то окно программы из трея вылезает, вызывает сообщение + запускает звуковое оповещение. Для успешной работы программы нужно просто распаковать архив в ОДНУ папку. В архиве сам таймер + звуковой файл. Его не переименовывать и не перемещать! Иначе оповещения звуком вы не получите. Вот ссыль: http://my-projects.narod.ru/timer1.3.rar |
| Автор: Spawn™Production® 23.1.2006, 20:36 |
| Да уж, сам миллион раз сталкивался... геморная штука... Нанде ? (Зачем по-японски) Можно и не с большой буквы Конечно, можно... открытый исходный код это здорово Часто повторяющиеся действия можно объединить в процедуры... |
| Автор: mr.Anderson 23.1.2006, 21:03 | ||
Только в функции. |
| Автор: Spawn™Production® 23.1.2006, 21:23 |
| Не выпендривайся |
| Автор: Guedda 23.1.2006, 22:34 |
| Начал работать с временем? Ну, вот задание, если хошь: Пользователь вводит дату, время: Программа берет и считает, сколько секунд осталось до этой даты. За сколько времени справишься? |
| Автор: Spawn™Production® 24.1.2006, 17:39 |
| минут за 20 Функции CompareTime, CompareDateTime и CompareDate. |
| Автор: mr.Anderson 24.1.2006, 18:04 |
| Хм. Я не начал работать со временем. Spawn™Production®, впервые слышу про такие функции. Сейчас выложу следующую версию таймера. Теперь в нем таймер + секундомер. Вот линк: http://my-projects.narod.ru/timer1.4.rar |
| Автор: Spawn™Production® 24.1.2006, 19:06 | ||
| Читаем документацию и радуемся жизни. правильно думаешь.
Системным таймером придётся пользоваться... Добавлено @ 19:08 И действительно, нужно делать с долями секунд, так как иначе смысла от такого секундомера ноль... |
| Автор: mr.Anderson 24.1.2006, 19:10 | ||||
Это, наверное, сложно? Тогда пока я ограничусь точностью до секунд. Так что пока ничего нового в качестве улучшения не придумаю, новых версий не будет. Добавлено @ 19:11
Оно понятно. |
| Автор: maxim1000 24.1.2006, 19:50 |
| ну если потом пойти, например, в сторону нескольких событий, напоминалки, и вообще органайзера, то кто его знает |
| Автор: mr.Anderson 24.1.2006, 20:50 |
| Тогда лучше сделать наоборот - довести этот таймер до ума, а уж потом встроить его в мой проект "Ежедневник" (тут где-то темка с ним еще есть, я потом туда воткну ссыль на него). Вот так можно сделать. |
| Автор: Partizan 25.1.2006, 02:58 |
| а какие проблемы помоему в стандартном компоненте vcl у TTimer минимальное значение свойства interval == 30 ms |
| Автор: mr.Anderson 25.1.2006, 19:08 |
| Ну! А я говорю, что он отстает по времени. Неправильно работает, короче. Не "ритмично". Вот и мучаюсь. |
| Автор: Бегемот 25.1.2006, 19:25 |
| sim7,вот тебе ещё повод подумать! 1. При установке времени отсчёта сделать переход по полям ввода с помощью стрелок! Причём, при переходе содержимое поля должно выделяться! Сделать это того, что бы, если вдруг решил подкорректировать, то не надо было бы беспокоить мышонка или гнать фокус через все компоненты! 2. Начинать отсчёт после ввода времени по нажатию Enter. Т.е если в поле “секунды” нажали Enter – начинаем отсчёт! Опять же для удобства! 3. Можно добавить к твоему таймеру возможность выключать комп! Будет очень полезно для тех, кто засыпает в обнимку с клавой! Ну, чего-то типа выбора, разбудить хозяина, крикнув из динамика что-нибудь ласковое, или же спокойненько выключить компьютер, не нарушая его сна. 4. Ну, и хотя бы десятые доли секунды в секундомере сделать просто необходимо! Удачи! |
| Автор: mr.Anderson 25.1.2006, 19:37 |
| Бегемот, пунктики 1-2 подумаю. 3 - понятия не имею, как это сделать. 4 - тоже самое. |
| Автор: mr.Anderson 26.1.2006, 19:18 |
| Так. С Энтером сделал. Таперича при нажатии Энтера в третьем поле (ввод секунд) - запускается таймер. С пунктом 1 мучаюсь. |
| Автор: Spawn™Production® 26.1.2006, 20:42 | ||||
Можно это прикрутить и к другим полям... Если после ввода секунд ты захотел подредактировать минуты или часы и отуда нажал Enter, то также всё должно запуститься. Положи на форму Label1 и Timer1
Можешь пока не спешить... Впринципе, Windows98 выключается простой API функцией ExitWindows, а вот с XP дело хуже, там чтобы выключить, нужны привелегии... а с токенами работать сдохнешь Я по жизии, в каком бы языке не сталкивался, использовал готовый код. |
| Автор: mr.Anderson 26.1.2006, 20:58 |
| Так-с. Сделал некоторые изменения. Что нового: 1. Обеспечен переход стрелочками из любого Edit'а в соседний. 2. По нажатию Enter'а на любом Edit'е запускается таймер. 3. При ошибке (ошибок две: пустые поля или нулевые значения во всех трех Edit'ах) выводится сообщение (это уже было) + устанавливается фокус в Edit1 (где устанавливаются часы). Вот это все нововведения пока. С секундомером пока не получается. Работаю. Ссыль: http://my-projects.narod.ru/timer1.5.rar |
| Автор: Spawn™Production® 26.1.2006, 21:14 | ||
можно глянуть пост прямо над твоим Я бы сделал проверку в событии Change: Если какое-либо поле пустует, то кнопка запуска не работает... |
| Автор: mr.Anderson 27.1.2006, 17:13 | ||
| УРРРАААААААААА!!!!!!! Я прямо весь в эмоциях! Секундомер работает, чтоб его! Здорово! Spawn™Production®, ваш код только подал мне идею. Но одна проблема осталась. Подскажите, почему при работе секундомера, связанного с системным временем, сама метка (которая и показывает числовое значение часов/минут/секунд/миллисекунд) подергивается? И как это убрать, а то очень раздражает! Вот код собственно события OnTimer секундомера:
Вот. Прошу пока не обращать внимания на не совсем корректную работу этого кода. Помогите плиз с вышезаданным вопросом про моргание. |
| Автор: Spawn™Production® 27.1.2006, 18:15 |
| Думаю придётся в раздел Boland'а лезть... Проблема с миганием во всех языках, и, как мне кажется, от неё нет панацеи. Мигает потому, что каждую миллисекунду идёт перерисовка контрола. Перерисовывается он несколько дольше, так что сам понимаешь. |
| Автор: mr.Anderson 27.1.2006, 18:24 |
| Ладно, тогда эту проблему отставили. Сейчас малец доделаю и выложу предварительную версию с "наполовину" работающим секундомером и списком нововведений. |
| Автор: Бегемот 27.1.2006, 21:34 | ||||||||||
sim7!
Можно ли избавиться от мерцания Label’а я не знаю, а вот отучить от этой дурной привычки компонент имеющий Canvas можно! У той же формы есть канва, поэтому отображать работу секундомера без мерцания можно прямо на ней! Для этого тебе придётся кое-что добавить, и кое-что изменить. Если в вкратце, то смысл такой: выводим текст на невидимой области, после чего копируем его на форму методом CopyRect! И всё! В header-файле (Unit1.h) в секции private объяви глобальные переменные!
В Unit1.cpp на FormCreate добавь следующий код:
В обработчике события OnTimer вместо строки, в которой ты выводишь в Label, вставь следующий код:
Ну, и при закрытии формы...
|
| Автор: mr.Anderson 28.1.2006, 18:29 |
| Ох, друзья, да подождите вы меня незнакомым кодом заваливать... |
| Автор: mr.Anderson 29.1.2006, 17:15 | ||||||
| Так. Готова новая версия, 1.7. Что нового: 1. Полноценный секундомер. Точность до тысячных долей секунды. Думаю, этого хватит. 2. Добавлена возможность выключения компа по окончании отсчета только для систем Windows 98. Для ХР я почитал хелп - там столько кода писать надо, что я сразу отказался от этой затеи. Так что пользователям не-Windows 98 систем придется обойтись без этой фичи. 3. Секундомер можно запустить, если у вас выделен радиобатон "Секундомер". Просто когда фокусировка на этом радиобатоне, жмите Энтер, и секундомер запустится. Ох, уж и не помню, чего ж еще там новенького... Столько работы на секундомер ушло, что и забыл уже, чего же я там делал нового... 4. Исправлены разные мелкие баги, типа некорректной работы свойства Enabled и прочих у разных объектов. Ну, вот, вроде, и все, что есть нового. Основным новшеством, конечно, является секундомер. У него реализованы возможности остановить/сброс и + возможность пауза/продолжить. Полезная фича, правда? Вот, пожалуй, и все. Вот ссыль: http://my-projects.narod.ru/timer1.7.zip . Добавлено @ 17:16 Код, к сожалению, выложить не получилось - у вас на форуме длина сообщения ограничена. А код в эту длину не влезает. Добавлено @ 17:17 Попробую разбить код на части:
Добавлено @ 17:17
Добавлено @ 17:18 Получилось! Добавлено @ 17:19 Да, и еще: я не стал исправлять неверную кодировку (у Билдера кодировка не та, что на форуме), посему плиз не ругайтесь за белеберду вместо русских надписей в коде. Добавлено @ 17:20 И еще вот код немного измененного заголовочного файла:
|
| Автор: Spawn™Production® 29.1.2006, 18:16 |
| sim7, лучше не код пиши, а сами исходники запакуй в архив и выкладывай |
| Автор: mr.Anderson 30.1.2006, 20:32 |
| ОК, сейчас сделаю. Таймер-то протестировали? Добавлено @ 20:43 Вот ссыль на исходники (приблизительно 800 килобайт, почему так много, не знаю): http://my-projects.narod.ru/timer_basecode.zip |