powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выпадающий календарик с настраиваимым списком праздников (пример)
8 сообщений из 8, страница 1 из 1
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39790051
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё одна поделка - календарик с примером.
В новых Access для поля типа Date по умолчанию появляется стандартный календарь в старых такого нет.
Особенность этого - настраиваемые из контекстного меню списки праздничных дней.
Хранятся в таблице.

https://www120.zippyshare.com/v/AEts2Gyh/file.html

PS.
Большой размер базы из-за дополнительных модулей:
- поддержка настраиваемых контекстных меню (clsContextMenu, clsContextMenuControl);
- групповой обработки событий для контролов (clsControlEventsTransfer, clsRelay);
- плавающих кнопок (clsFloatButton)
- и, - основная масса за счет набора модулей для использования картинок на контролах (в данном случае используются для вывода иконок в контекстное меню).
Дергаю из своих проектов - старался максимально обрезать всё, что непосредственно не нужно для работы примера, но без фанатизма поэтому наверняка осталось много "лишнего" кода.

PS. PS. как и ранее для тех кому это может быть нужно|интересно.
...
Рейтинг: 0 / 0
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39790123
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обнаружил косяк при закрытии календарика крестиком - слетала дата в поле источника.
Лечится заменой в modDates.ShowDateSelector
Код: vbnet
1.
2.
HandleError:
    Result = False ' <- 0 = #12/30/1899#


на:
Код: vbnet
1.
2.
HandleError:
    Result = DateValue ' <- исходное значение селектора


sorry - издержки выдергивания кусков из разных мест
...
Рейтинг: 0 / 0
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39790315
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще одна старая, но благополучно забытая ошибка: неправильная нумерация недель года.
Лечится заменой в Form_frmDROP_Date.p_UpdateDays
Код: vbnet
1.
strCap = DatePart("ww", DateAdd("d", BegDate, d))


на:
Код: vbnet
1.
strCap = DatePart("ww", DateAdd("d", BegDate, d), , vbFirstJan1)
...
Рейтинг: 0 / 0
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39791333
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вспомнил про еще один вариант с календарём который когда-то начинал, а потом задача отпала и так до ума и не довел - может тоже кому-то пригодится.
Лепилось для что-то вроде расписания отпусков. выглядит так:

пример запускается с формы Test_Vacations

исходный выпадающий календарик также присутствует выглядит так:

пример запускается с формы Test_Calendar

ссылка: https://www99.zippyshare.com/v/9IXpO5yf/file.html
...
Рейтинг: 0 / 0
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39791401
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iKaRus, ты свои примеры лучше размести на Программирование MsAccess, VB, VBA и ссылки туда дай. Там структура для примеров лучше заточена. Сейчас там вроде Joss заведует. Он здесь частенько бывает.
Тут, я боюсь, через некоторое время ссылки стухнут.

ИМХО.
...
Рейтинг: 0 / 0
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39791435
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, Спасибо - так и сделал: http://am.rusimport.ru/MSAccess/download.aspx?id=837
...
Рейтинг: 0 / 0
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39801410
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Найдена ошибка в позиционировании контекстного меню.
В результате переписана функция modDates.p_GetCtlLocation.
Цель функции - получить экранные размер и позицию контрола (в пикселях) для последующего позиционирования окон при помощи API.
Делалась на замену встроенной accLocation, которая не вполне корректно работает в ленточных формах (похоже accLocation к каждой строке добавляет высоту секции заголовка).
Толком не проверена но вроде бы в поставленной задаче работает корректно как в ленточной так и в обычной формах во всех видимых секциях.

Текст исправленной функции:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
Private Function p_GetCtlLocation(Ctl As Access.Control, _
    Optional ByRef X, Optional ByRef Y, Optional ByRef W, Optional ByRef H) As Boolean
' получает экранные размер и позицию контрола (в пикселях)
Const c_strProcedure = "p_GetCtlLocation"
' v.0.2.1       : 15.04.2019 - исправлено позиционирование в секциях формы
'----------------
' в большинстве случаев отлично cработает ctl.accLocation X, Y, W, H, varChild,
' НО - в ленточной форме (покрайней мере в Access 2003) при расчете позиции по вертикали
' похоже он к каждой строке добавляет высоту секции заголовка
' из-за чего смещение от строки к строке возрастает
' поэтому считаем по-другому:
Dim lpPoint As POINTAPI
Dim dx As Long, dy As Long
Dim Result As Boolean

    Result = False
    On Error GoTo HandleError
' получаем экранные координаты (0;0) клиентской области формы
    With Ctl.PARENT.Form
        ClientToScreen .hWnd, lpPoint
' прибавляем расстояние от (0;0) до контрола
    ' по горизонтали
        If Not IsMissing(X) Then dx = .CurrentSectionLeft: X = lpPoint.X + TwipsToPixels(Ctl.Left + dx, DIRECTION_HORIZONTAL)
    ' по вертикали
        If Not IsMissing(Y) Then
            If Ctl.Section <> acHeader Then
            ' если это не заголовок формы
                ' для обычной формы добавляем высоты вышестоящих секций
                On Error Resume Next
                dy = .Section(acHeader).Height: If Err Then Err.Clear
                On Error GoTo HandleError
                Select Case Ctl.Section
                Case acDetail
                ' для ленточной формы добавляем расстояние от верхнего края формы
                    If (.DefaultView = 1 Or .DefaultView = 2) Then dy = .CurrentSectionTop
                Case acFooter
                    dy = dy + .Section(acDetail).Height
                End Select
            End If
            Y = lpPoint.Y + TwipsToPixels(Ctl.Top + dy, DIRECTION_VERTICAL)
        End If
        If Not IsMissing(W) Then W = TwipsToPixels(Ctl.Width, DIRECTION_HORIZONTAL)
        If Not IsMissing(H) Then H = TwipsToPixels(Ctl.Height, DIRECTION_VERTICAL)
    End With

    
    Result = True
HandleExit:
    p_GetCtlLocation = Result
    Exit Function
HandleError:
    Result = False
'    Dbg.Error Err.Number, Err.Description, _
'        Source:=c_strModule, Procedure:=c_strProcedure, LineNum:=Erl
    Err.Clear: Resume HandleExit
End Function



Обновленный модуль modDates во вложении.
...
Рейтинг: 0 / 0
Выпадающий календарик с настраиваимым списком праздников (пример)
    #39823866
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
перевыложил пример целиком: https://www89.zippyshare.com/v/r4snCDwC/file.html
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Выпадающий календарик с настраиваимым списком праздников (пример)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]