Календарь смен
Ссылка на скриншот в Linux
в ini-файл указать дату первой смены и программа от неё будет высчитывать.
Отредактировано AZJIO (03.06.2022 00:50:20)
PureBasic - форум |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » PureBasic - форум » PureBasic для Windows » Календарь смен
Календарь смен
Ссылка на скриншот в Linux
в ini-файл указать дату первой смены и программа от неё будет высчитывать.
Отредактировано AZJIO (03.06.2022 00:50:20)
1. сегодня подсветить
2. день недели нужен
3. выходные подсветить
4. праздники подсветить, чтобы отличались от выходных
AZJIO, забываешь когда тебе на работу? стареешь?
1. сегодня подсветить
2. день недели нужен
3. выходные подсветить
4. праздники подсветить, чтобы отличались от выходных
На каждую подсветку нужно 3 цвета: фон, кайма, шрифт. Так как я уже сделал 4 типа, то уже 12 цветов, если добавить ещё 3 типа будет итого 21 цвета. В теории можно но будем развиваться потихоньку предчувствуя необходимость. Добавлять можно полно чего, у других программ есть алгоритмы графиков, не 2+2 а кучи вариантов, я пока взял распространённый и по совместительству мой.
AZJIO, забываешь когда тебе на работу? стареешь?
Я на другом форуме изначально обозначил задачу:
1. Выход с больничного
2. Выход с отпуска
3. Подстроить дату начала отпуска с первой сменой.
Хотя столько времени уходит, что наверно если я за все года это посмотрю в другой программе, то потрачу в итоге меньше времени. Но тут то важна идея и желание. Я уже делал лаунчер с нарисованными кнопками (#BS_OWNERDRAW) и с подсветкой окантовки вокруг кнопки (BitBlt_), так почему бы используя готовые наработки не попробовать с календарём? Сплошная математика.
В начале было желание раз уж используются кнопки, а не просто текст сделать типа напоминателя. Выбираю год, месяц, день, нажимая на соответствующие кнопки и добавляю событие, оно сохраняется в ini-файл и потом подсвечивается, а если типа прогу добавить в автозагрузку, то при каждом запуске просто сверяет дату и за 5 дней начинает напоминать о неком дне, или задав за сколько дней напоминать.
И кстати обновил. Цвет добавил в ini-файл, сделал вариант если ini-файл не существует то месяцы в цифрах 1-12, во общем задал значения по умолчанию. Добавил дни предыдущего и следующего месяца блеклыми, добавил цвет смен разный, если день/ночь, то день например жёлтый, ночь - синий.
Отредактировано AZJIO (14.05.2022 09:45:55)
Я уже делал лаунчер с нарисованными кнопками (#BS_OWNERDRAW) и с подсветкой окантовки вокруг кнопки (BitBlt_)
Почему не канвас?
Почему не канвас?
Мне кажется обрабатывать легче в цикле. Канвас как 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)
как один холст с 42 квадратиками?
Именно так. Нарисовать не сложно. Размеры квадратиков известны и легко вычислить что и где рисовать и над каким сейчас курсор мышки.
Может этот код будет полезным Редактор картинок для графического индикатора.
Пётр
Как нибудь займусь, понимая что надо в любом случае изучать канвас досконально, делать примеры чтобы легче потом было использовать.
Сейчас перезагрузился в Linux попытать счастье подстроить исходник, вроде не сложно задавать цвета не в Callback, а непосредственно в цикле смены дат. У кнопки нет нативной функции окрашивания, но есть у TextGadget. Подменил, добавил функции SetGadgetColor, заработало. Но центрирование работает только по горизонтали. Увеличил размер цифр и прилипание цифр к потолку ящика стало не так бросаться в глаза. И тут же возник вопрос, а как тот же текст центрировать в неком виртуальном ящике заданным например структурой RECT? И вот тут я чувствую, что даже в Windows могу потерять это свойство, которое на кнопках сейчас присутствует.
Добавил в архив линуксовый исходник.
например структурой RECT
В линукс нет структуры RECT. Это из WinAPI.
Для TextGadget можно узнать минимальную ширину и высоту для отображения текста вызвав GadgetWidth и GadgetHeight с флагом #PB_Gadget_RequiredSize
Исходя из размеров центровать.
Обнаружил что архив то я не выложил ссылку, исправил первый пост.
Но центрирование работает только по горизонтали.
и по вертикали тоже, но только если текст в одну строку #SS_CENTERIMAGE
а в API это две константы
а как тот же текст центрировать в неком виртуальном ящике заданным например структурой RECT?
есть готовые константы, но это API
или саму rect задавать размером под текст, и её центрировать как тебе надо
для лучшей видимости добавь тень, как у меня на скрине
а зачем тебе кнопки, канвас, календарь должен кликаться? тогда канвас лучше, возможностей больше, например подсветка числа
подсветка это просто, делаешь маленькую картинку с полупрозрачностью, а дальше варианты, можно использовать ImageGadget() по координатам или накладывать на канвас, но при уходе надо перерисовать
Обновил
Добавил кнопку, чтобы указать первую смену. Так как в Linux никто не пользуется портаблом, есть только пакеты, то проблематично искать ini-файл, чтобы менять дату, поэтому сменить теперь можно из окна программы.
Мне кажется обрабатывать легче в цикле. Канвас как 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)
Надо день в месяце брать от григорианского календаря,соответственно и разницу в днях между датами можно тогда рассчитать,я переводил код ранее с старого Бейсика ЭВМ,если найду выложу,или сфоткаю с книжки тот без перевода.
Вот еле нашёл исходник свой расчёт между датами.
Global d.i=7 Global m.i=2 Global g.i=2018 Global N.i If m>2 m+1 Else m+13 g-1 EndIf N=Int(365.25*g)+Int(30.6*m)+d-621050 Debug N N=N-Int(N/7)*7+1 Select N Case 1 Debug "Пн" Case 2 Debug "Вт" Case 3 Debug "Ср" Case 4 Debug "Чт" Case 5 Debug "Пт" Case 6 Debug "Ст" Case 7 Debug "Вс" EndSelect d=7 m=5 g=2018 If m>2 m+1 Else m+13 g-1 EndIf N1=Int(365.25*g)+Int(30.6*m)+d Debug N1 d=27 m=5 g=2018 If m>2 m+1 Else m+13 g-1 EndIf N=Int(365.25*g)+Int(30.6*m)+d Debug N N-N1 Debug N Procedure.s dendaty(d.i,m.i,g.i,koldneydonovoydaty=0);день, месяц, год,(возврат день недели) Protected N.i If m>2 m+1 Else m+13 g-1 EndIf d+koldneydonovoydaty N=Int(365.25*g)+Int(30.6*m)+d-621050 N-Int(N/7)*7+1 Select N Case 1 ProcedureReturn "Пн" Case 2 ProcedureReturn "Вт" Case 3 ProcedureReturn "Ср" Case 4 ProcedureReturn "Чт" Case 5 ProcedureReturn "Пт" Case 6 ProcedureReturn "Ст" Case 7 ProcedureReturn "Вс" EndSelect EndProcedure Procedure.l Dnei_Mezhdu_Datami(d.i,m.i,g.i,d2.i,m2.i,g2.i);количество дней между датами Protected N.i Protected N1.i If m>2 m+1 Else m+13 g-1 EndIf N1=Int(365.25*g)+Int(30.6*m)+d If m2>2 m2+1 Else m2+13 g2-1 EndIf N=Int(365.25*g2)+Int(30.6*m2)+d2 N-N1 ProcedureReturn N EndProcedure Debug dendaty(31,05,2022); Debug Dnei_Mezhdu_Datami(16,09,2013,21,06,2018)
Sergeihik
вот мой вариант:
https://www.purebasic.fr/english/viewto … 88#p567788
кстати, можно прикрутить к календарю как функцию, не зря же писал. Два диалога запроса времени в которые вставлять текущее время, одно из которых можно изменить или оба. Хотя не представляю кому это пригодится.
Я тут Fedora установил, пробую RPM пакеты собирать, уже 4 пакета собрал (Find_GUI, create-desktop-file, RegExpPB, StopwatchTimer). Если так всё удачно складывается, может MacOS поставить, чтобы расширить возможности. С руборда человек с исходников собрал RegExpPB на MacOS.
Также я обновил прогу, всвязи с проблемой DPI. Я проверил все проги на баги с DPI и получил 2 шт, "Календарь" и "CaptureText". В последней просто галку убрал из настройки компилятора, потому что там как такового окна нет, а вот расчёты мыши и границ вокруг окон все ломаются. В проге "Календарь" очистка окна по площади не захватывала все кнопки, так как окно увеличилось, теперь исправил.
Отредактировано AZJIO (31.05.2022 00:34:19)
AZJIO, забываешь когда тебе на работу? стареешь?
Любое творчество я уважаю. А программное тем более. Даже такие небольшие реализации, людям нужны. Но вот всё больше я думу думаю. Может быть мы как-то скоррелируемся, и что-то весомое создадим - ВМЕСТЕ... Я например, мечтаю создать подобие IDE Visual Studio, но для PB и AutoIt, хотя бы визуально. Чтобы и визуальную тему можно было переключать и создавать для себя каждому пользователю. Начал на C#, сделал много, через год бросил, понял что хочу более простой реализации кроссплатформенности и без фреймоворков. Окунулся в PB. DockPanel на PB, мне просто интересно создать. Как художника и перфекциониста, меня гнобит убогий вид IDE и того и другого языка. Одному, это лет 10 пилить. Интересно конечно, а будет ли потом оно нужно. Возможно и будет, ведь лично я, до сих пор с удовольствием в восьмибитки играю)))
P.S. За offtop извиняюсь.
Отредактировано Webarion (31.05.2022 03:34:57)
Webarion
Плаг пиши. Исходники IDE в свободном доступе, можешь их править, вот только я понимаю, что это мне не по зубам. Тут с одним только плагом подсветки я сдулся. Тот плаг использует разовую подсветку индикаторов, а с использованием стиля в grub2-генератор я хотел сделать аналогичное плагом в notepad++, он работал для всех документов, но когда я решил запрашивать тип документа и менять движок подсвечивания, то запарился искать ошибку, и забросил до лучших времен, тем более автор помешан на западных лозунгах и тем более если есть акелпад с подсветкой регвырами.
Вы здесь » PureBasic - форум » PureBasic для Windows » Календарь смен