PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Календарь смен


Календарь смен

Сообщений 1 страница 12 из 12

1

Календарь смен

Скачать: yandex upload.ee

Ссылка на скриншот в Linux
https://i.imgur.com/LfE8DiT.png

в ini-файл указать дату первой смены и программа от неё будет высчитывать.

Отредактировано AZJIO (15.05.2022 06:37:58)

0

2

1. сегодня подсветить
2. день недели нужен
3. выходные подсветить
4. праздники подсветить, чтобы отличались от выходных

картинка

AZJIO, забываешь когда тебе на работу? стареешь? :crazyfun:

0

3

newJS написал(а):

1. сегодня подсветить
2. день недели нужен
3. выходные подсветить
4. праздники подсветить, чтобы отличались от выходных

На каждую подсветку нужно 3 цвета: фон, кайма, шрифт. Так как я уже сделал 4 типа, то уже 12 цветов, если добавить ещё 3 типа будет итого 21 цвета. В теории можно но будем развиваться потихоньку предчувствуя необходимость. Добавлять можно полно чего, у других программ есть алгоритмы графиков, не 2+2 а кучи вариантов, я пока взял распространённый и по совместительству мой.

newJS написал(а):

AZJIO, забываешь когда тебе на работу? стареешь? :crazyfun:

Я на другом форуме изначально обозначил задачу:
1. Выход с больничного
2. Выход с отпуска
3. Подстроить дату начала отпуска с первой сменой.
Хотя столько времени уходит, что наверно если я за все года это посмотрю в другой программе, то потрачу в итоге меньше времени. Но тут то важна идея и желание. Я уже делал лаунчер с нарисованными кнопками (#BS_OWNERDRAW) и с подсветкой окантовки вокруг кнопки (BitBlt_), так почему бы используя готовые наработки не попробовать с календарём? Сплошная математика.

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

И кстати обновил. Цвет добавил в ini-файл, сделал вариант если ini-файл не существует то месяцы в цифрах 1-12, во общем задал значения по умолчанию. Добавил дни предыдущего и следующего месяца блеклыми, добавил цвет смен разный, если день/ночь, то день например жёлтый, ночь - синий.

Отредактировано AZJIO (14.05.2022 09:45:55)

0

4

AZJIO написал(а):

Я уже делал лаунчер с нарисованными кнопками (#BS_OWNERDRAW) и с подсветкой окантовки вокруг кнопки (BitBlt_)

Почему не канвас?

0

5

Пётр написал(а):

Почему не канвас?

Мне кажется обрабатывать легче в цикле. Канвас как 42 холста или как один холст с 42 квадратиками? Сам канвас добавляет 40 кб к проге, он сделан как сложное устройство с кучей событий в Callback. Хотя для кроссплатформенности лучше было бы его выбрать, так как я уже понимаю что в Linux целая проблема будет с нуля рисовать.
Чтобы легче было я с пятнашек взял генерацию кнопок и чуть изменил, поэтому изначально легко пошло.
Можно и попробовать канвас.
Сейчас единственное сомнение это в расчёте разницы дат. Там есть разница в плюс и разница в минус, я взял от средины дня 12 часов 00 минут 00 секунд. Между двумя датами будет допустим ровно 100 дней, а если в минус, что если получится 99,9999, а у меня интегрер, девятки откинутся, надо в float наверно делать, делим на 4, чтобы получить остаток, который будет сдвигом, в одном случае 25 с остатком 0, в другом остаток 3.999, отбрасываем дробные получим 3. Так что я пока вот этот момент изучить, как более критичный.
Сейчас проверил онлайн календарь рабочих смен взял выборочно разные года и месяцы в том числе за 2024г, всё сходится. Взял указал дату из будущего 2023г и посмотрел как рассчитываются месяца 2022, тоже всё сходится.

Отредактировано AZJIO (14.05.2022 11:48:39)

0

6

AZJIO написал(а):

как один холст с 42 квадратиками?

Именно так. Нарисовать не сложно. Размеры квадратиков известны и легко вычислить что и где рисовать и над каким сейчас курсор мышки.
Может этот код будет полезным Редактор картинок для графического индикатора.

0

7

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

Сейчас перезагрузился в Linux попытать счастье подстроить исходник, вроде не сложно задавать цвета не в Callback, а непосредственно в цикле смены дат. У кнопки нет нативной функции окрашивания, но есть у TextGadget. Подменил, добавил функции SetGadgetColor, заработало. Но центрирование работает только по горизонтали. Увеличил размер цифр и прилипание цифр к потолку ящика стало не так бросаться в глаза. И тут же возник вопрос, а как тот же текст центрировать в неком виртуальном ящике заданным например структурой RECT? И вот тут я чувствую, что даже в Windows могу потерять это свойство, которое на кнопках сейчас присутствует.

Добавил в архив линуксовый исходник.

0

8

AZJIO написал(а):

например структурой RECT

В линукс нет структуры RECT. Это из WinAPI.
Для TextGadget можно узнать минимальную ширину и высоту для отображения текста вызвав GadgetWidth и GadgetHeight с флагом #PB_Gadget_RequiredSize
Исходя из размеров центровать.

0

9

Обнаружил что архив то я не выложил ссылку, исправил первый пост.

0

10

AZJIO написал(а):

Но центрирование работает только по горизонтали.

и по вертикали тоже, но только если текст в одну строку #SS_CENTERIMAGE
а в API это две константы

AZJIO написал(а):

а как тот же текст центрировать в неком виртуальном ящике заданным например структурой RECT?

есть готовые константы, но это API
или саму rect задавать размером под текст, и её центрировать как тебе надо

для лучшей видимости добавь тень, как у меня на скрине

а зачем тебе кнопки, канвас, календарь должен кликаться? тогда канвас лучше, возможностей больше, например подсветка числа
подсветка это просто, делаешь маленькую картинку с полупрозрачностью, а дальше варианты, можно использовать ImageGadget() по координатам или накладывать на канвас, но при уходе надо перерисовать

0

11

Обновил
Добавил кнопку, чтобы указать первую смену. Так как в Linux никто не пользуется портаблом, есть только пакеты, то проблематично искать ini-файл, чтобы менять дату, поэтому сменить теперь можно из окна программы.

0

12

AZJIO написал(а):

Мне кажется обрабатывать легче в цикле. Канвас как 42 холста или как один холст с 42 квадратиками? Сам канвас добавляет 40 кб к проге, он сделан как сложное устройство с кучей событий в Callback. Хотя для кроссплатформенности лучше было бы его выбрать, так как я уже понимаю что в Linux целая проблема будет с нуля рисовать.
Чтобы легче было я с пятнашек взял генерацию кнопок и чуть изменил, поэтому изначально легко пошло.
Можно и попробовать канвас.
Сейчас единственное сомнение это в расчёте разницы дат. Там есть разница в плюс и разница в минус, я взял от средины дня 12 часов 00 минут 00 секунд. Между двумя датами будет допустим ровно 100 дней, а если в минус, что если получится 99,9999, а у меня интегрер, девятки откинутся, надо в float наверно делать, делим на 4, чтобы получить остаток, который будет сдвигом, в одном случае 25 с остатком 0, в другом остаток 3.999, отбрасываем дробные получим 3. Так что я пока вот этот момент изучить, как более критичный.
Сейчас проверил онлайн календарь рабочих смен взял выборочно разные года и месяцы в том числе за 2024г, всё сходится. Взял указал дату из будущего 2023г и посмотрел как рассчитываются месяца 2022, тоже всё сходится.

Отредактировано AZJIO (Вчера 11:48:39)

Надо день в месяце брать от григорианского календаря,соответственно и разницу в днях между датами можно тогда рассчитать,я переводил код ранее с старого Бейсика ЭВМ,если найду выложу,или сфоткаю с книжки тот без перевода.

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Календарь смен