Компонент ввода диапазона дат (постановка)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Детали реализации)
(Детали реализации)
Строка 77: Строка 77:
 
=== Детали реализации ===
 
=== Детали реализации ===
  
Визуальный компонент должен быть наследован от стандартного компонента [[TPanel]].
+
Имя класса: [[TgsPeriodEdit]].
 +
Родительский класс: [[TPanel]].  
 +
Имя файла: gsPeriodEdit.pas.
 +
Расположение: gedemin\component.
 +
 
 +
==== Свойства ====
 +
 
 +
DateBegin
 +
DateEnd
  
 
[[Category:Постановка]]
 
[[Category:Постановка]]

Версия 13:46, 28 августа 2008

Содержание

Требования

  1. Ввод единичной даты;
  2. Ввод произвольного диапазона дат;
  3. Быстрый выбор диапазона:
    1. Год;
    2. Полугодие;
    3. Квартал;
    4. Месяц;
    5. Неделя;
  4. Быстрый ввод с клавиатуры с подстановкой текущей даты (текущего дня, месяца, года), подобно тому, как сейчас подставляются текущий день месяц и год по нажатию на клавишу пробел в TxDateEdit;
  5. Использование метасимволов:
    1. c -- сегодня
    2. з -- завтра
    3. в -- вчера
    4. н -- текущая неделя
    5. пн -- прошлая неделя
    6. сн -- следующая неделя
    7. м -- текущий месяц
    8. пм -- прошлый месяц
    9. см -- следующий месяц
    10. к -- текущий квартал
    11. пк -- прошлый квартал
    12. ск -- следующий квартал
    13. г -- текущий год
    14. пг -- прошлый год
    15. сг -- следующий год
  6. Хранение последнего введенного значения. Причем, если был использован метосимвол, то сохранятся должен именно он, а не рассчитанные на основе его значения;
  7. Хранение истории введенных значений;
  8. Хранение последнего выбора пользователя (последней активной страницы в выпадающем окошке): ввод даты, диапазона, квартала, месяца и т.п.
  9. Возможность работы только с клавиатуры без помощи мыши;
  10. Компонент должен быть реализован ввиде автономного pas файла (группы pas файлов) и не иметь связей с кодом платформы Гедымин.

Визуальный интерфейс

Компонента должна представлять TCombobox или TPanel с расположенным на ней TCombobox, где в окошке редактирования производится ввод диапазона дат. Начальная дата и конечная дата разделяются символом '-'.

Для ввода единичной даты, достаточно, чтобы одна из дат диапазона была пустой. После клика мышкой по элементу в правой части окошка редактирования (или при помощи клавиши стрелка вниз), под окошком ввода дат должен появляться элемент TPageControl со следующими закладками:

  1. История - можно просмотреть и выбрать ранее введённые пользователем данные из списка TListBox.
  2. Произвольный выбор дат - можно выбрать даты диапазона из двух элементов-календарей TMonthCalendar.
  3. Год - выбор года из списка TListBox.
  4. Квартал - выбора квартала по году из первой даты, если она есть. Выбирается из списка TListBox.
  5. Месяц - выбор месяца по году из первой даты, если она есть. выбирается из списка TListBox.
  6. Неделя - выбор недели по году из первой даты, если она есть. Выбирается из списка TListBox.
  7. День - выбор дня по году из первой даты, если она есть. Выбирается из списка TListBox.

Ввод с клавиатуры

Исходное состояние: курсор попадает в поле ввода. Оно либо пустое, либо находящийся в нем текст выделяется, так что вводимые символы заменят его.

Пользователь начинает вводить цифры. Первые две введенные цифры трактуются как номер дня. После них автоматически подставляется разделитель. Пользователь может так же ввести одну только цифру и ввести разделитель самостоятельно. Аналогичным образом, следующие две цифры трактуются как номер месяца. Некорректные цифры просто не вво$дятся и не отображаются экране. Например, нельзя первой цифрой ввести 4, так как нет номера дня, начинающегося с 4-х.

Окончив ввод первой даты, пользователь набирает символ '-' и вводит вторую дату. Можно ввести только одну единственную дату, что будет соответствовать однодневному диапазону.

В любой момент пользователь может набрать метасимволы, при этом в поле ввода подставится и выделится соответствующий им диапазон. Сами метасимволы на экране не отображаются.

Нажатие пробела подставляет текущую дату. Обратите внимание на различие между пробелом и метасимволом "с" (сегодня). "с" подставит в поле ввода диапазон из одного дня, соответствующий сегодняшней дате, заменив им все содержимое поля ввода, тогда как пробел подставит в качестве одной из дат диапазона сегодняшнюю дату.

Поясним на примере. Пусть сегодня 5-е мая 2005 года. Тогда, введя в поле ввода строку "01.04.2004-" и нажав пробел, пользователь получит диапазон "01.04.2005-05.05.2005". Если же, ввести "01.04.2004-" и нажать "с", то содержимое поля ввода будет замещено значением "05.05.2005". Более того, в истории сохранится, что пользователь воспользовался метасимволом и при открытии окна на следующий день в поле автоматически подставится "06.05.2005".

Выпадающее окно

Выпадающее окно будет иметь следующие вкладки:

  • История -- содержит список ранее введенных значений.
  • Период -- содержит два календаря для выбора первого и последнего дня периода.
  •  ??? -- используется для ввода фиксированных периодов. На вкладке располагаются, слева направо:
    • вертикальный список с годами, выше и ниже списка находятся кнопки прокрутки. Выбранный год подсвечивается в списке.
    • вертикальный список кварталов.
    • вертикальный список месяцов.
    • матрица с номерами недель.
  • Подсказка -- выводится список метасимволов с расшифровками их значений. Можно выбрать любой метасимвол и соответствующий ему диапазон подставится в поле ввода.

Закрывается окно или щелчком мыши за его пределами, или нажатиме на кнопку Закрыть в правом нижнем углу. С клавиатуры выпадающее окно закрывается с помощью клавиши Esc, при этом возвращается прежнее значение поля ввода, или нажатием на клавишу Enter.

Детали реализации

Имя класса: TgsPeriodEdit. Родительский класс: TPanel. Имя файла: gsPeriodEdit.pas. Расположение: gedemin\component.

Свойства

DateBegin DateEnd

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты