уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Это четвертая статья из серии по компонентам JVCL вкладки Jv TimeFrameWork. Предыдущие посты (по порядку):

  1. Jv TimeFrameWork. Свойства компонента TjvTFDays.
  2. Jv TimeFrameWork. Свойства компонента TjvTFDays. Продолжение.
  3. Jv TimeFrameWork. Методы TjvTFDays для работы с элементами события и областями сетки.

Сегодня продолжим разбираться с методами компонента и рассмотрим ещё две группы методов: методы для редактирования событий и методы для работы с сеткой расписания. Для реализации примеров использования методов нам понадобится наше тестовое приложение, которое мы начали писать в прошлый раз (ссылка на скачивание расположена в конце поста).

Методы для управления редактированием событий.

В эту группу событий входят всего четыре метода.

procedure EditAppt(Col: Integer; Appt: TJvTFAppt);

Переводит событие Appt из колонки Col в режим редактирования.

procedure FinishEditAppt;

Завершает редактирование события (скрывает текстовый редактор для события, если он в данный момент был показан)

function Editing: Boolean;

Возвращает True, если в данные момент какое-либо событие сетки находится в режиме редактирования.

function CanEdit: Boolean;

Возвращает True, если в сетке есть события доступные для редактирования.

Пример использования методов

Добавим на форму три кнопки (TButton) как показано на рисунке ниже:

Prog_4

Для этого перенесем переменную Appt из обработчика OnDblClick в секцию public. Теперь напишем следующие обработчики OnClick у кнопок:

procedure TMainForm.Button1Click(Sender: TObject);
begin
  DayGrid.EditAppt(0,Appt);
end;
 
procedure TMainForm.Button2Click(Sender: TObject);
begin
  DayGrid.FinishEditAppt
end;
 
procedure TMainForm.Button3Click(Sender: TObject);
begin
  Memo1.Lines.Add('CanEdit = '+BoolToStr(DayGrid.CanEdit,True))
end;

Теперь запустите приложение, добавьте новое событие в расписание (сделайте двойной клик по сетке) и убедитесь, что:

  1. Клик по первой кнопке переводит последнее добавленное событие в режим редактирования
  2. Клик по второй кнопке скрывает редактор и завершает редактирование события
  3. Клик по третьей кнопке возвращает в Memo1 строку “CanEdit = True

Чтобы метод CanEdit вернул False можно, например, изменить в свойствах Options TjvTFDays значение agoShowText на False – в этом случае текст события не будет отображаться в сетке и редактирование событий будет невозможно.

Методы для работы с сеткой расписания

function RowsPerHour: Integer;

Возвращает количество строк сетки, которое занимает 1 час времени. По умолчанию — 2 (1 строка = 30 минут). Возвращаемый результат этой функции зависит от свойства Granularity

function RowCount: Integer;

Общее количество строк таблицы (за исключением строк заголовка.

function PossVisibleRows: Integer;

Количество видимых в данный момент строк сетки, включая частично видимые строки.

function VisibleRows: Integer;

Общее количество видимых строк сетки.

function FullVisibleRows: Integer;

Количество полностью видимых строк сетки.

function VisibleCols: Integer;

Общее количество видимых в данный момент колонок.

function FullVisibleCols: Integer;

Количество полностью видимых колонок.

function AdjustEndTime(ATime: TTime): TTime; dynamic;

Вычитает из значения времени ATime одну секунду. Метод предназначен в первую очередь для прорисовки событий на сетке.

function RowStartsHour(RowNum: Integer): Boolean;

Возвращает True, если строка с индексом RowNum соответствует началу часа, т.е. если у нас Granularity = 30 — одна строка равняется 30 минутам, то функция будет возвращать True для индексов строк 0, 2, 4 и т.д.

function RowEndsHour(RowNum: Integer): Boolean;

Возвращает True, если строка соответствует окончанию часа.

function RowEndTime(RowNum: Integer): TTime;

По индексу RowNum строки возвращает соответствующее время окончания. Например, при установках компонента по умолчанию, для строки с индексом 0 функция вернет значение 00:29:59, для строки с индексом 1 — 00:59:59 и т.д.

function BottomRow: Integer;

Возвращает индекс самой нижней полностью видимой строки.

function RightCol: Integer;

Возвращает индекс правой полностью видимой колонки

function RowToTime(RowNum: Integer): TTime;

Возвращает время, соответствующее строке с индексом RowNum. Например, для строки с индексом 2 функция вернет значение 1:00:00.

function TimeToRow(ATime: TTime): Integer;

По заданному времени ATime возвращает соответствующую ему строку в сетке.

procedure TimeToTop(ATime: TTime);

Проматывает сетку таким образом, что строка, соответствующая времени ATime становится самой верхней видимой в сетке.

function RowToHour(RowNum: Integer): Word;

По индексу RowNum строки возвращает час, которому она соответствует. Например, для строк с индексами 0 и 1 результат функции будет одинаков и будет равен 0.

function HourStartRow(Hour: Word): Integer;

По заданному значению часа Hour возвращает индекс первой строки. Например, для времени 00:00:00 (Hour = 0) функция вернет 0.

function HourEndRow(Hour: Word): Integer;

По заданному значению часа Hour возвращает индекс последней строки. Например, для времени 00:00:00 (Hour = 0) функция вернет 1.

Пример использования методов

Демонстрировать работу сразу всех методов, думаю нет особого смысла, так как, работа большинства из них  достаточно проста и понятна, но все же работу некоторых методов представить стоит.

Например, допишем наш обработчик события OnCreate для главной формы таким образом:

procedure TMainForm.FormCreate(Sender: TObject);
var Rect: TRect;
    DataHeight, DataWidth: integer;
begin
  ...
  DayGrid.TimeToTop(Now);
end;
begin

Таким образом при запуске программы мы будем видеть актуальную на данный момент часть сетки расписания.

Теперь добавим новый обработчик OnMouseWheelDown для компонента DayGrid (TjvTFDays):

procedure TMainForm.DayGridMouseWheelDown(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  Memo1.Lines.Add(Format('Самая нижняя видимая строка %d соотвествует времени %s',
                          [DayGrid.BottomRow,
                          TimeToStr(DayGrid.RowToTime(DayGrid.BottomRow))]))
end;

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

Итак, сегодня мы рассмотрели ещё 23 различных метода компонента TjvTFDays, итого, в общей сложности у нас есть информация по 40 методам. TjvTFDays достаточно большой компонент как по части возможностей, так и по объему различных свойств, методов и событий, но, думаю, что после достаточно подробного его изучения остальные компоненты будет изучить гораздо проще.

Исходник (Delphi XE) примера можно скачать по приведенной ниже ссылке:

[download id=»77″ format=»1″]
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
4 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
trackback

[…] This post was mentioned on Twitter by Королевство Delphi, Vlad. Vlad said: Новый пост: Jv TimeFrameWork. Методы TjvTFDays: редактирование событий и работа с сеткой. — http://bit.ly/gam2Fn […]

Александр Божко

Влад, по поводу Link компрессора
шикарно бы было, что бы он мог взять имя статьи по линку из Title и вставить в буфер ссылку в формате
<Название статьи> <короткий линк> — Для Твиттера
Вот сегодня не ping.fm ни твитме не постят в Твиттер
Было бы крайне удобно

Александр Божко

Было бы здорово