PureBasic - форум

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

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


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


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

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

1

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

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

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

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

Отредактировано AZJIO (03.06.2022 00:50:20)

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

13

Вот еле нашёл исходник свой расчёт между датами.

Код:
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)


0

14

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)

0

15

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

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

:)
Любое творчество я уважаю. А программное тем более. Даже такие небольшие реализации, людям нужны. Но вот всё больше я думу думаю. Может быть мы как-то скоррелируемся, и что-то весомое создадим - ВМЕСТЕ... Я например, мечтаю создать подобие IDE Visual Studio, но для PB и AutoIt, хотя бы визуально. Чтобы и визуальную тему можно было переключать и создавать для себя каждому пользователю. Начал на C#, сделал много, через год бросил, понял что хочу более простой реализации кроссплатформенности и без фреймоворков. Окунулся в PB. DockPanel на PB, мне просто интересно создать. Как художника и перфекциониста, меня гнобит убогий вид IDE и того и другого языка. Одному, это лет 10 пилить. Интересно конечно, а будет ли потом оно нужно. Возможно и будет, ведь лично я, до сих пор с удовольствием в восьмибитки играю)))
P.S. За offtop извиняюсь.

Отредактировано Webarion (31.05.2022 03:34:57)

0

16

Webarion
Плаг пиши. Исходники IDE в свободном доступе, можешь их править, вот только я понимаю, что это мне не по зубам. Тут с одним только плагом подсветки я сдулся. Тот плаг использует разовую подсветку индикаторов, а с использованием стиля в grub2-генератор я хотел сделать аналогичное плагом в notepad++, он работал для всех документов, но когда я решил запрашивать тип документа и менять движок подсвечивания, то запарился искать ошибку, и забросил до лучших времен, тем более автор помешан на западных лозунгах и тем более если есть акелпад с подсветкой регвырами.

0


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