Программа должна уметь подавать звуковой сигнал и выводить на экран сообщение. Думаю, этого будет достаточно, чтобы отвлечься от компьютера и сделать записанное дело. Но если нет, то придётся принудительно сворачивать прогу, которой вы так увлечены. Или переводить компьютер в ждущий режим :)
Также программа должна напоминать и через определённый промежуток времени, и в конкретное время.
В этой схеме реализован только интерфейс будущей программы. Используются две группы элементов, чтобы было логичнее и привычнее. Причём доступность полей ввода в группах зависит от флажков. По умолчанию у всех полей ввода параметр Enabled=false. Флажки все по умолчанию также выключены. Однако при переключении они выдают на событие onCheck 1 или 0 (вкл/выкл), что подаётся на метод doEnabled (чтобы из параметра сделать методом, нужно щёлкнуть по белому квадратику рядом с ним).
Теперь нужно реализовать функционал.
В этой части реализована проверка времени. При нажатии кнопки первой событие разветвителя проверяет, включен ли флажок (его точку свойств Checked мы вывели из мультиэлемента, просто подведя связь от точки до края редактора мультиэлемента).
IndexToChanel выдаёт событие под таким номером, какой ему подали на точку Index. Так что если флажок включен, то запускается таймер, который каждую секунду проверяет, соответствует ли введённое время текущему (компонент Time находится в самом конце вкладки "Система", не забудьте настроить его параметр Format). И при положительном сравнении If_else генерирует событие onTrue. А к нему поключеён компонент PointHint. Этот компонент не выполняет никаких действий и служит лишь для демонстрации. Он не компилируется, а сохраняется только в схеме.
Почти то же самое происходит со вторым событием разветвителя, только здесь ещё устанавливает интервал для таймера и таймер имеет Autostop=1, т.е. оставнавливается после первого срабатывания.
Это окончательный вариант схемы. Возможно, он покажется сложным, но сейчас я всё расскажу по порядку.
Начинаем, как обычно, с события, которое всё инициирует. Это нажатие кнопки. И первое событие разветвителя переключает компонент Switch, чтобы поменять надпись на кнопке (внимательно рассмотрите параметры этого компонента). Второе событие разветвителя также поключено к компоненту Switch, но здесь он определяет функционал, а не надпись, и выдаваемые им значения совсем другие.
IndexToChanel разбирает, что передано ему в потоке, и генерирует соответствующее событие. Пусть это 1 - включение будильника. Первые два события последующиего разветвителя вы уже знаете, а третье отправляет программу в трей, откуда её можно добыть двойным щелчком (событие onDblClick компонента TrayIcon). И когда время подошло, то в действие вступает новый разветвитель.
Первые два его события напоминают нам о чём-то важном, что мы записали. Следующие два - выключают таймеры и меняют надпись на кнопке. Точно так же, как это делает сама кнопка, нажатая второй (4-й, 6-й и т.д.) раз.
А даьлше - только ваша фантазия. Можно сделать ещё кучу событий для напоминания, можно вставить множество дополнительных полезных функций. Главное - побольше экспериментировать с различными компонентами.
А полезная у Вас программа получилась - и всего 44 Кб. Причем аскетичный интерфейс почему-то приятнее, чем красивости аналогов. Будильник должен быть суров и прост, как армейский штык.
ОтветитьУдалитьСвязующими узлами Вы используете группы элементов - это новый мощный прием.
Но схема получилась какая-то растянутая. Возможна ли ее оптимизация?
Можно, конечно, сместить часть элементов вниз, но главное - не переборщить, чтобы схеме легко читалась.
ОтветитьУдалить