Часы со стрелками

29.06.18

Разработка - Работа с интерфейсом

Часы со стрелками на управляемых формах, созданные штатными средствами языка на платформе 8.3.10.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Часы со стрелками:
.epf 9,65Kb ver:1.1
4
4 Скачать (1 SM) Купить за 1 850 руб.

В первую очередь, при запуске обработки подготавливается для отрисовки табличный документ. В связи с тем, что по умолчанию ширина ячейки не равна её высоте, "пиксели" получаются вытянутыми по оси У, в результате чего картинка растягивается. Для того чтобы исправить это, нужно изменить ширину ячеек рабочей области:

Экран.Область("R1C1:R40C40").ШиринаКолонки = 2;

После чего подключается обработчик ожидания с таймингом 0.1

В нём происходит всё самое интересное. Для начала экран очищается, а затем отрисовывается циферблат. Я не буду показывать как это происходит по той причине, что для понимания этого сначала мне стоит объяснить как отрисовываются стрелки. Прежде чем начать отрисовку, необходимо получить текущее время, разбив его на часы, минуты и секунды. После этого полученные данные преобразуются в градусы. Это происходит так:

((ТекущееЗначение-МинимальноеЗначениеИзСтарогоДиапазона) / (МаксимальноеЗначениеИзСтарогоДиапазона-МинимальноеЗначениеИзСтарогоДиапазона)) * (МаксимальноеЗначениеИзНовогоДиапазона-МинимальноеЗначениеИзНовогоДиапазона) + МинимальноеЗначениеИзНовогоДиапазона;

То есть, для минут это выглядит следующим образом:

УголМинутной = Число(Формат(((ТекущаяМинута) / (60)) * (360),"ЧДЦ=; ЧН=0"));

Но для часов всё будет немного интереснее. Если мы просто изменим 60 минут на 12 часов, это будет работать. Однако, на протяжении всего часа маленькая стрелка не сдвинется с места и это будет вызывать затруднения восприятия ближе к концу часа. Поэтому после того как мы проделаем с часами то же что и с минутами, нам нужно будет добавить к полученному количеству градусов значение, полученное из текущего количества минут:

УголЧасовой = УголЧасовой + Число(Формат(((ТекущаяМинута) / (60)) * (30),"ЧДЦ=; ЧН=0"));

Теперь часовая стрелка будет плавно двигаться по кругу в течение всего часа. За это время она пройдёт расстояние, равное пяти минутам для минутной стрелки, а это 30 градусов.

Итак, теперь у нас есть данные об угле наклона каждой стрелки относительно 12 часов и можно приступить к её отрисовке, но как нам найти каждый пиксель стрелки? Для того чтобы вычисление координат стрелок было проще понять, давайте посмотрим на рисунок:

Представим, что все стрелки выходят из точки C. Точка A смотрит ровно на 12 часов, а угол альфа мы только что посчитали. Мы примерно знаем где должна быть наша стрелка CB, но как узнать её координаты? Для себя мы определились, что рисование происходит на поле 40х40 квадратов. Пускай точка С будет иметь координаты 20;20. Длина стрелки пусть будет равняться 16. Теперь мы знаем, что у нас есть равнобедренный треугольник с вершинами в точках 20;20 и 20;4. Длина равных рёбер равна 16, а угол между ними составляет, допустим, 120 градусов. Для того чтобы найти координаты искомой точки B, давайте нарисуем точку D, которая образует прямоугольный треугольник с точками С и B. Школьный курс геометрии говорит, что сторона DB равна sin(180 - α)*BC, а сторона CD эквивалентна cos(180 - α)*BC. Но если сделать эти вычисления, добавить получившиеся длины сторон к центру часов и закрасить полученный пиксель, вместо стрелки будет всего лишь точка. Поэтому рисование происходит в следующей процедуре:

Процедура ВывестиСтрелку(Начало, ДлинаСтрелки, Угол, Цвет)
	                                                                                                      
	Если Угол > 180 Тогда
		Угол = 360 - Угол;
		Вычитание = Истина;
	Иначе 
		Вычитание = Ложь;
	КонецЕсли;
	
	Для Счетчик = Начало По ДлинаСтрелки Цикл
		КоординатыХ =  Число(Формат(20 + Счетчик * Sin((180 - Угол)*(3.1415926535897932/180)) * ?(Вычитание, -1, 1), "ЧДЦ=; ЧН=0"));
		КоординатыУ = Число(Формат(20 + Счетчик * Cos((180 - Угол)*(3.1415926535897932/180)), "ЧДЦ=; ЧН=0"));
		Экран.Область(КоординатыУ, КоординатыХ).ЦветФона = Цвет;		
	КонецЦикла;
	
КонецПроцедуры

Очевидно, что сумма углов треугольника не может превышать 180 градусов, поэтому в начале стоит такая проверка. Не совсем очевидное 3.1415926535897932/180 преобразует наш угол из градусов в радианы, т.к. встроенные функции sin и cos работает только с ними.

После отрисовки обработчик ожидания включается заново в связи с тем, что с интервалами менее 1 секунды он включается однократно. Таким образом получается рекурсивныя процедура рисования, вызывающая сама себя 10 раз в секунду.

часы программирование управляемые формы табличный документ рисование

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55434    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63824    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    19715    28    6    

44

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    21810    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    10926    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17950    1225    elcoan    53    

125

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

3 стартмани

10.04.2023    12651    167    acces969    31    

126
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PerlAmutor 155 29.06.18 14:50 Сейчас в теме
2. Неопределено 91 29.06.18 15:00 Сейчас в теме
(1) Не вижу проблем, но изначально об этом не думал по неопытности. Тогда отпадёт необходимость строить линию попиксельно и с одной стороны часы станут аккуратнее, но с другой точечное построение интереснее с академической точки зрения. Повешу новый режим на тумблер, спасибо за ссылку.
4. Неопределено 91 02.07.18 12:25 Сейчас в теме
(1) Добавил рисование линий в качестве стрелок и эллипсов в качестве шкалы (см. картинку в описании), а также исправил баг, возникающий до 10 утра, когда текущий час состоит из одной цифры.
6. PerlAmutor 155 02.07.18 12:42 Сейчас в теме
(4) В качестве дальнейшего развития мысли можно еще посмотреть в сторону этой https://infostart.ru/public/312139/ и этой публикации https://infostart.ru/public/77713/ с корректировкой на то, что в платформе 8.3.9 появились возможности работы с бинарными данными.
8. Неопределено 91 02.07.18 13:55 Сейчас в теме
(6) Кажется, придётся вспоминать школьный курс QBASIC и режим SCREEN12.
3. madonov 260 02.07.18 10:25 Сейчас в теме
https://infostart.ru/public/86918/ - Развлекался будучи студентом во время освоения платформы.
Сделано средствами 1С на измерительных диаграммах, кстати без табличного документа, а прям на форме. Думаю и на УФ это доступно.
Из минусов - все стрелки одинаковой длины.
Evil Beaver; Dmitri93; +2 Ответить
5. Неопределено 91 02.07.18 12:32 Сейчас в теме
(3) Не могу понять, как там нарисованы стрелки?
7. PerlAmutor 155 02.07.18 12:45 Сейчас в теме
(5) Это диаграмма вида "Измерительная". Длиной стрелок управлять в ней нельзя.
9. madonov 260 03.07.18 02:56 Сейчас в теме
(5) Измерительная диаграмма. Для того, чтобы сделать её круглой необходимо установить начальный угол 0, а конечный 360.
Длину стрелок регулировать не получится, только цвет. Пробовал наложить 3 диаграммы друг на друга соосно - не получается, они друг друга перекрывают, несмотря на установленный флаг "Прозрачность"
Прикрепленные файлы:
Работа_Не_Волк.epf
Неопределено; +1 Ответить
10. Arsen1986 81 04.07.18 08:40 Сейчас в теме
Вспомнил QBasic, спасибо за публикацию.
11. user1345957 26.02.20 23:58 Сейчас в теме
Я пытаюсь сделать часы на форме, на которой будет видно что идут минуты и часы.
Ошибка мешает: метод недоступен на сервере.
12. Неопределено 91 27.02.20 02:56 Сейчас в теме
(11) Пытаетесь сделать что-то своё, или не запускается моя обработка? Или вы что-то переделали в моей обработке и оно перестало работать? Судя по описанию ошибки идёт вызов функции, которая доступна только на клиенте. Без примера кода, в котором возникает ошибка, помочь будет труднее, чем с ним.
13. RustIG 1836 25.06.20 13:24 Сейчас в теме
14. RustIG 1836 25.06.20 13:25 Сейчас в теме
математика в своей красе (не во всей, но в своей)
15. SatanClaws 146 13.01.25 04:23 Сейчас в теме
А зачем извращение в виде
* ?(Вычитание, -1, 1)


Не проще ли чуть выше переписать

Знак = 1;
Если Угол > 180 Тогда
		Угол = 360 - Угол;
		Знак = -1;
КонецЕсли;


и дальше просто умножать на знак?
16. Неопределено 91 13.01.25 05:26 Сейчас в теме
(15) Молодой был, неопытный.
Оставьте свое сообщение