Это четвертая статья из серии по компонентам JVCL вкладки Jv TimeFrameWork. Предыдущие посты (по порядку):
- Jv TimeFrameWork. Свойства компонента TjvTFDays.
- Jv TimeFrameWork. Свойства компонента TjvTFDays. Продолжение.
- Jv TimeFrameWork. Методы TjvTFDays для работы с элементами события и областями сетки.
Сегодня продолжим разбираться с методами компонента и рассмотрим ещё две группы методов: методы для редактирования событий и методы для работы с сеткой расписания. Для реализации примеров использования методов нам понадобится наше тестовое приложение, которое мы начали писать в прошлый раз (ссылка на скачивание расположена в конце поста).
Методы для управления редактированием событий.
В эту группу событий входят всего четыре метода.
procedure EditAppt(Col: Integer; Appt: TJvTFAppt);
Переводит событие Appt из колонки Col в режим редактирования.
procedure FinishEditAppt;
Завершает редактирование события (скрывает текстовый редактор для события, если он в данный момент был показан)
function Editing: Boolean;
Возвращает True, если в данные момент какое-либо событие сетки находится в режиме редактирования.
function CanEdit: Boolean;
Возвращает True, если в сетке есть события доступные для редактирования.
Пример использования методов
Добавим на форму три кнопки (TButton) как показано на рисунке ниже:
Для этого перенесем переменную 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;
Теперь запустите приложение, добавьте новое событие в расписание (сделайте двойной клик по сетке) и убедитесь, что:
- Клик по первой кнопке переводит последнее добавленное событие в режим редактирования
- Клик по второй кнопке скрывает редактор и завершает редактирование события
- Клик по третьей кнопке возвращает в 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″]
[…] This post was mentioned on Twitter by Королевство Delphi, Vlad. Vlad said: Новый пост: Jv TimeFrameWork. Методы TjvTFDays: редактирование событий и работа с сеткой. — http://bit.ly/gam2Fn […]
Влад, по поводу Link компрессора
шикарно бы было, что бы он мог взять имя статьи по линку из Title и вставить в буфер ссылку в формате
<Название статьи> <короткий линк> — Для Твиттера
Вот сегодня не ping.fm ни твитме не постят в Твиттер
Было бы крайне удобно
Александр Божко, легко :) я сейчас на работе большую часть времени разбираюсь с JVCL (пока там свободно — есть простор), а дома дописываю по просьбам пинговалку, может до кучи и компрессора допишу немного, хотя последние версии с Твиттером дружат — отправляют сообщения в ленту
Было бы здорово