FoxPro Club Главная

Конференция Решения Фотоальбом Сайт М.Дроздова Статьи Файловый архив Книга Visual FoxPro 9.0 Русский Help для Visual FoxPro
Пользователей: 9099
Вход
Календарь для VFP9

Решил потестировать в VFP 9 новые свойства, в том числе MousePointer Grid'а, и это вылилось в очередной "Календарь";)


 
Прислал: Sergey Konoplev   Категория: Интерфейс


Календарь для VFP9



Поместите строку типа set classlib to <Ваш-путь-к-библиотеке-DatePicker>\DatePicker [additive] в метод Load формы, на которую помещен класс DateBox_DP. Библиотека DatePicker содержит четыре класса, один из которых - DateBox_DP - помещается на рабочую форму, а остальные используются по мере необходимости. Для субклассирования колонок в модуле Class_Prg.prg определяется класс Column_2.

Дату можно ввести вручную, уменьшить и увеличить на одни сутки клавишами "минус" и "плюс" или колесом мышки, а можно нажать на кнопку "Календарь" и выбрать дату из одноименной формы.

Форма "Календарь" деактивирует вызывающую форму до тех пор, пока Вы не нажмете кнопки "Выбрать", "Отменить", "Закрыть", не выберите в ControlBox'е пункт меню "Закрыть", не сделаете двойной клик на любом числе календаря или не нажмете клавишу Esc.

Для деактивации/активации меню применяется глобальная переменная glModalModeMainMenu.

В форме "Календарь" для смены месяца и года можно использовать как кнопки ComboBox'а и Spinner'а, так и колесо мышки.
 
Сделайте оценку этого решения Плохо Удовлетворительно Так себе Хорошо Отлично Текущая оценка: (4.997) Вложение [65.82]kb
Дополнения пользователей
Календарь для VFP9
[+][?]
Перминов Игорь
14.07.04 05:05:18

Очень даже себе ничего. Удобственно, и это пока самое лучшее, что я видел.
А для 8 есть?
Сергей Коноплев
14.07.04 09:37:00

Спасибо. Версии для 8-ки нет, т.к. в ней, без накрывания шейпом всего грида, не меняется форма
курсора над последним.
А варианты с шейпом существуют, в том числе и на этом сайте.

Положил новую версию, в которой колесо задействовано еще и в "combobox'е" ввода даты. Кроме того
добавлена смена года (а не только смена месяца) при вращении колеса над Grid'ом "Календаря".
Aries
16.07.04 10:23:30

Посмотрел ваше решение. Довольно симпатично.
Но у меня есть маленькие дополнения.
1. Сделать кнопочку на календаре - выбор текущей даты.
т.е допустим мы залезли на пару месяцев вперед
а потом решили выбрать текущую дату.
(Подобное есть в АктивИксе Date and Time).
2. Сделать кнопки навигации по месяцам, а не только
выбор месяца. Эти кнопки довольно удобная вещь.

А на последок скажу, что вы малость поторопились с
выложением решения. Ведь VFP9 еще не вышел и 
воспользоваться вашим решением не представляется
возможным.

Удачи.
С ув. Aries (Дмитрий Готовский)

Сергей Коноплев
19.07.04 14:58:12

Здравствуйте Андрей.

Я выложил новую версию, в которой:
1. Сделал на календаре кнопку "Сегодня".
2. Кнопки навигации по месяцам не добавил, но вместо этого немного упорядочил работу с колесиком
мыши над областями выбора месяца, года и даты.

Насчет релиза. Возможности интерфейса Фокса улучшились, ну я и не удержался:) А время летит так
быстро!
Aries
20.07.04 14:28:06

Приветствую Сергей!
Кстати меня зовут Дмитрий :)
Потестировал новую версию.
Выбор текущего дня мне понравился!
Вот вам мои дополнения.
1. Думаю выбор надо делать все таки одним кликом,
а не двойным.
2. При работе колесом у меня, даже если пытаюсь медленно
крутить, через раз проскакивает на несколько месяцев
вперед или в зад. Да и не у всех есть колесо на миши.
Поэтому думаю что все таки навигацию Вам надо сделать.
=====================================
Теперь непосредственно посмотрел ваш код, и сложилось
пару предложений.
1. Все таки не стоит использовать PUBLIC переменные
Думаю лучше завести свойство к контейнере, допустим oWin
THIS.Parent.oWin=CreateObject('Calendar_DP', sys(1272, This.Parent.txtDate))
Думаю так лучше будет.
2. Посмотрел код MainExit.PRG Если она используется в
календаре. То это не есть хорошо. Такие команды нельзя
использовать в программе
CLEAR ALL
CLOSE DATABESE ALL
А то закрыл календарь и все закрылось. :)

Перминов Игорь
22.07.04 09:19:18

Доброе время суток!
Качнул новую версию. Решил использовать.
Положил на форму DATEBOX_DP. Компильнул. Не работает.
Выдает в Init объекта CALENDAR_DP - Объект FORM1 не найден.
Строка 32.
FORM1 - форма на которой находится DATEBOX_DP. В чем трабла непонятно...
Перминов Игорь
22.07.04 09:41:11

Понял. Объект CALENDAR_DP исползует коллекцию _SCREEN.FORMS, т.е. необходимо чтобы:
а) _SCREEN=ON
б) и родительская форма не была TOPLEVELFORM
В моем случае все как раз наоборот.
Тогда необходимо при создании объекта CALENDAR_DP делать следуюющее:
CreateObject('Calendar_DP', Thisform.Datebox_dp)
Перминов Игорь
22.07.04 11:28:15

Так, форма запускается. Но при использовании колеса на гриде и спиннере приложение закрывается без
предупреждения!
Сергей Коноплев
23.07.04 11:43:06

2 All: Выложил новую версию с учетом исправленных замечаний.
Сергей Коноплев
23.07.04 15:21:35

Извините за задержку с ответами: были технические затруднения.

Aries> Кстати меня зовут Дмитрий :)
Здравствуйте Дмитрий!
Прошу прощения за то, что перекрестил Вас.

Сергей Коноплев
23.07.04 15:26:34

2Aries
-Думаю выбор надо делать все таки одним кликом,а не двойным.
Нет, я не согласен. Сейчас можно ткнуть в дату, а затем посмотреть каким днем недели эта дата
будет в другом месяце, или просто подумать над чем-то своим:)
-При работе колесом у меня, даже если пытаюсь медленно крутить, через раз проскакивает на
несколько месяцев вперед или в зад.
Тестировал на нескольких ПК и разных версиях Windows - все OK. Может пружинка на колесе ослабла
или сломалась?

Сергей Коноплев
23.07.04 15:27:28

2Aries
-Да и не у всех есть колесо на миши.
Для таких есть стрелки на выборе месяца и года.
-Поэтому думаю что все таки навигацию Вам надо сделать.
Ну... пока нет, не нравятся мне перегруженные интерфейсы:( 
-Думаю лучше завести свойство к контейнере,
OK. Уже сделал.
-Посмотрел код MainExit.PRG...
MainExit.PRG всегда использую для возврата из исполняемой
программы в проект. К календарю она не имееет никакого
отношения.
Сергей Коноплев
23.07.04 15:29:02

2Перминов Игорь
-Выдает в Init объекта CALENDAR_DP - Объект FORM1 не найден.
  Поставьте в Load'е FORM1 строку типа (извините, не указал сразу. В инструкции уже исправил.):
set classlib to <Ваш путь>\DatePicker [additive]
-Понял. Объект CALENDAR_DP исползует коллекцию _SCREEN.FORMS, т.е. необходимо чтобы:
а) _SCREEN=ON
б) и родительская форма не была TOPLEVELFORM
В моем случае все как раз наоборот.
  И в моем тоже:) Проект перед Вами. Посмотрите в чем различие между Вашей формой и моей -
datepickertest,
которая тоже TOPLEVELFORM. У меня _SCREEN=OFF (см. исполняемый config.fpw в проекте).
Levi
27.03.05 09:12:12

Здравствуйте, Сергей.
В Вашем проекте имеется упоминание файла 'cee6.app", а сомого файла нет. Можете пояснить, какова
роль этого файла?
Благодарю Вас.
Sergey Konoplev
28.03.05 13:32:23

Здравствуйте, Levi.

COB Editor Extension,был разработан для VFP 3, 5 и 6 версий и частично является предтечей
IntelliSense Manager. Ввиду того, что последний работает гораздо медленнее, если писать в нем свои
коды (fox ведь, а не си), и не включает возможности назначения клавишных макросов, я продолжаю
использовать не только ISM, но и CEE (www.cobsystem.com)
lesev
29.07.05 10:10:55

Сделано отстойно. Зачем было разбивать его на кучу файлов?
lesev
29.07.05 10:33:05

Кстати можете посмотреть как сделано у меня в теме: Календарь для VFP7 и дальше
Sergey Konoplev
28.08.05 14:11:04

2 lesev: ответил в мыло:)
GoshaS
17.11.05 16:44:29

у меня, при втором и последующем выборе даты, год меняется на 0100.
GoshaS
17.11.05 17:24:24

у меня, при втором и последующем выборе даты, год меняется на 0100.
GoshaS
17.11.05 18:24:46

у меня, при втором и последующем выборе даты, год меняется на 0100.
GoshaS
17.11.05 19:05:05

Нашел проблему c непонятным отображением года
в инит формы можно добавить сл.
local l_Century
l_Century=SET("Century")
SET CENTURY ON
затем после всех вычислений, типа:
.spnYear.Value = val(substr(dtoc(evaluate(.txtDate + '.Value')), 7, 4))
можно все вернуть как было
SET CENTURY &l_Century
А в остальном вроде как очень даже хорошо.

Kaiser
17.05.06 19:07:49

Немного странно сделана передача ссылки на объект в строке нажатия кнопки cmdCalendar - 
This.Parent.frmCalendar_DP = createobject('Calendar_DP', sys(1272, This.Parent.txtDate))

тоже самое и вполне естественнее надо сделать так:
This.Parent.frmCalendar_DP = createobject('Calendar_DP', this.Parent.txtDate)

и по убирать в форме calendar_dp в методе init 
всякие такие штуки:
    .txtDate = txtDate
    lcCmd = .txtDate + '.Enabled = .f.'
    &lcCmd
    lcCmd = .txtDate + '.Parent.cmdCalendar.Enabled = .f.'
    &lcCmd

что вполне нормально заменяется на:
	.txtDate = loObj
	.txtDate.Enabled = .f.
	.txtDate.Parent.cmdCalendar.Enabled = .f.

как будто нельзя передавать ссылку на объект.
короче над кодом надобно поработать.
Kaiser
17.05.06 19:18:51

а так в целом довольно интересно
Sergey Konoplev
30.05.06 17:29:02

Выложил новую версию. Постарался учесть замечания GoshaS и Kaiser.
Sergey Konoplev
30.05.06 17:46:09

Поторопился с сообщением:( Что-то не грузится новый архив, пишет "Решение не найдено. Статус не
изменился". Буду разбираться с админом. Кому надо срочно - мыльте: ksf_ru@yahoo.com
Sergey Konoplev
31.05.06 11:09:53

Сегодня загрузил новую версию.
Извините, но для деактивации/активации меню теперь применяется глобальная переменная
glModalModeMainMenu, а не glModalMode.
Air
09.08.06 15:04:02

При ручном заполнении даты курсор перескакивает на кнопку открытия календаря. При нажатии entera
вместо того, чтобы перескочить на следующий элемент, открывается календарь, а это замедляет работу
оператора.
Air
09.08.06 15:33:16

предлагаю по этому поводу свойство TabStop кнопки cmdCalendar сделать равным false. В этом случае
курсор сразу будет перескакивать на следующий элемент.
[Дополнить]



© 2000-2016 Fox Club 
При размещении любых материалов с сайта на других ресурсах- прямая ссылка на www.foxclub.ru обязательна
Яндекс.Метрика