Sign in Join
Wiki copytemporary

Turbopower Visual PlanIt/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Turbopower Visual PlanIt/ru

OldNewLine
1+## О компоненте
2+
3+Visual PlanIt - это набор синхронизированных, привязанных к данным, компонентов для добавления в приложения возможностей управления временем, задачами и контактами. Получите Outlook-подобный интерфейс без хлопот.
4+
5+Этот компонент был разработан для кроссплатформенных приложений.
6+
7+### Скриншоты
8+
9+![](/wiki-images/f/fb/Tvplanit.PNG)
10+
11+### Авторы
12+
13+Авторы: Turbo Power Software\
14+Порт на LCL: Christian Ulrich и Werner Pamler
15+
16+### Лицензия
17+
18+[Mozilla Public Licence 1.1](http://opensource.org/licenses/mozilla1.1.php)
19+
20+### Загрузка
21+
22+- Version 1.010: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.0.10.zip/download>
23+- Version 1.08: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.08.zip/download>
24+- Version 1.06: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.06.zip/download>
25+- Version 1.04: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.04.zip/download>
26+
27+### SVN
28+
29+Вы можете проверить последний исходный код из <https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/tvplanit>
30+
31+Командная строка для этого
32+
33+`svn co `[`https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/tvplanit`](https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/tvplanit)
34+
35+### Сообщения об ошибках / запросы на новые функции
36+
37+Отчеты об ошибках и запросы функций должны быть отправлены в Lazarus/Free Pascal Bug Tracker; уточняйте, пожалуйста, что для проекта "Lazarus-CCR": <http://bugs.freepascal.org/>
38+
39+### Журнал изменений: новые функции
40+
41+- 02.02.2008 - Начальный порт (version 1.03)
42+- 01.08.2016 - (Почти) полный порт (version 1.04)
43+- 28.11.2016 - Перетаскивание, хранилище данных mORMot, новые поля, поддержка праздников, designtime и runtime пакеты (version 1.06)
44+- Май, 2018 - Адаптация к Laz1.8 + поддержка high DPI, хранилища данных json.
45+- 04.05.2018 - Редактор компонентов NavBar (version 1.10)
46+- 21.06.2018 - Новые свойства для VpDayView и VpContactButtons, импорт из файлов vCard и iCal (version 1.2.0)
47+
48+- текущий момент
49+ - (ничего на данный момент)
50+
51+### Несовместимые изменения
52+
53+- Версия 1.0.4 больше не компилируется с Delphi.
54+- Начиная с v1.0.11, события VpDayView `OnDVBeforeDrawEvent` и `OnDVAfterDrawEvent` имеют дополнительный параметр `GutterRect`. Это было сделано для возможности пользовательской отрисовки фона события/канавки.
55+- Начиная с версии 1.0.11, события `OnOwnerEditEvent` из `TVpDayView`/`TVpWeekView`/`TVpMonthView`, `OnOwnerEditContact` из `TVpContactGrid` и `OnOwnerEditTask` из `TVpTaskList` имеют новый параметр `IsNewEvent`, `IsNewContact` и `IsNewTask`, чтобы указать пользовательскому редактору, нужно ли редактировать новое событие/контакт/задачу.
56+
57+### Зависимости / Системные требования
58+
59+- FPC 2.6.4 или новее
60+- Lazarus 1.4.4 или новее
61+- Эти версии были доступны на момент написания этого обновления. Не исключено, что пакет можно использовать и с более старыми версиями.
62+
63+### Установка
64+
65+- Создайте каталог для компонентов, например, *lazarus\components\tvplanit*
66+- В этом каталоге разархивируйте файлы из zip-файла или выполните командную строку svn, описанную ранее.
67+- Откройтеlazarus
68+- В версии 1.04 библиотеки пакеты времени разработки и \[пакеты\] времени выполнения находится сведены в один. Откройте пакет *laz_visualplanit.lpk* из папки *source* с помощью *Package/Open file (-lpk)* и нажмите **Compile**. Нажмите **Use(Использовать) \> Install(Установить)**, если вы хотите установить компоненты в IDE.
69+- Начиная с версии 1.06 библиотека будет разделена на пакеты времени разработки и времени выполнения
70+ - Откройте пакет времени выполнения *laz_visualplanit.lpk* из корневой папки библиотеки с помощью *Package/Open file file (.lpk)* и нажмите **Compile**, чтобы скомпилировать его.
71+ - Откройте пакет времени разработки *laz_visualplanit_design.lpk* из той же папки, нажмите **Use(Использовать) \> Install(Установить)**.
72+- Если вам нужно хранилище данных Zeos, повторите \[манипуляции\] с пакетом *laz_visualplanit_zeos.lpk* (и *laz_visualplanit_zeos_design.lpk*) из папки *source/addons/zeos*. Убедитесь, что [[Zeos tutorial|Zeos компоненты]] установлены.
73+
74+------------------------------------------------------------------------
75+
76+Прим.перев.: не помню, с какой точно версии, но в Lazarus 1.8.4 уже была доступна установка этого компонента посредством Online Package Manager c установкой пакета Zeos при необходимости.
77+
78+------------------------------------------------------------------------
79+
80+### Документация
81+
82+Если вам нужна полная документация пакета VisualPlanIt, получите оригинальный 300-страничный PDF-файл TurboPower с официального сайта SourceForge версии под Delphi (https://sourceforge.net/projects/tpvplanit/files/tpvplanit_docs/).
83+
84+## Использование компонентов планировщика
85+
86+### С чего начать
87+
88+![](/wiki-images/1/16/Tvplanit_tutorial.png)
89+
90+#### Простой проект
91+
92+Вот краткое руководство для ваших первых шагов с компонентами VisualPlanIt.
93+
94+- Создайте новое приложение. Сохраните его в своей папке.
95+- Добавьте TPageControl с тремя вкладками. Назовите их *"Events"(События)*, *"Tasks"(Задачи)*, и *"Contacts"(Контакты)*.
96+- В палитре компонентов найдите вкладку *Visual PlanIt*.
97+- Выберите `TVpDayView` и добавьте его на вкладку *"Events"* PageControl. Это календарь на день, который отображает события (приемы, встречи и т.д.) на весь день с разрешением, определяемым так называемой `Granularity`(зернистостью).
98+ - Если вы привыкли к \[отображению\] времени в 24-часовом формате, переключите `TimeFormat` на `tf24Hours`.
99+ - Если календарь достаточно широкий, вы можете изменить `NumDays` на, скажем, 2, чтобы увидеть два дня одновременно.
100+ - Придайте компонентам более современный вид, установив для `DrawingStyle` значение `dsFlat`.
101+ - Точно так же вы можете добавить `TVpWeekView` (календарь на неделю) и/или `TVpMonthView` (календарь на месяц) на вкладку "Events". Они дают обзор тех же событий, но с меньшим разрешением. Текстовое многоточие ("...") отображается, если текст события не может быть отображен полностью.
102+- Теперь добавьте `TVpTaskList` на вкладку *"Tasks"* в PageControl. Это список дел с указанием сроков. Просроченные задания выделяются красным. Завершенные задачи зачеркиваются. Обратите внимание, что `DisplayOptions.ShowCompleted` или `.ShowAll` необходимо пометить, чтобы видеть выполненные задачи.
103+- Наконец, добавьте `TVpContactGrid` на вкладку *"Contacts"* PageControl.
104+- Опять же, вы можете использовать `DrawingStyle` `dsFlat` для более современного вида.
105+- Поиграйте со свойствами, чтобы настроить все эти визуальные элементы управления в соответствии с вашими предпочтениями. Например, `TVpWeekView` имеет свойство, определяющее, начинается ли неделя в понедельник или воскресенье (`WeekStartsOn`).
106+
107+- Не хватает двух компонентов: **DataStore** и **ControlLink**.
108+ - **Datastore** - это компонент, в котором хранятся данные, отображаемые в визуальных элементах управления. Пакет Visual PlanIt содержит ряд предопределенных хранилищ данных - см.ниже. Мы выбираем здесь TVpIniDatastore или TVpXmlDatastore, которые хранят данные в INI или XML-файле - эти хранилища не требуют базы данных, как другие хранилища данных.
109+ - В свойстве `Filename` введите имя для файла хранилища данных, например, *data.ini* или *data.xml*, соответственно. Использование относительного имени файла здесь означает, что путь будет относительно местоположения exe-файла программы, что удобно для этого урока. Однако в «реальном» приложении абсолютный путь может быть предпочтительным. И также может быть полезно ввести имя файла во время выполнения, например, в обработчике событий FormCreate.
110+ - Если имя файла известно во время разработки, вы можете установить для `AutoConnect` значение `true`, чтобы автоматически открывать хранилище данных при запуске программы. Если имя файла указано во время выполнения, оставьте `AutoConnect` в `false` и установите для свойства `Connected` хранилища данных значение `true`.
111+ - **ControlLink** автоматически устанавливает связь между хранилищем данных и визуальными элементами управления и гарантирует, что элементы управления получают свои данные, если это необходимо, и синхронизируются.
112+
113+- Теперь пришло время запустить программу
114+- Как **добавить данные**? Это делается двойным щелчком по любому из добавленных нами элементов управления, чтобы открыть специальный встроенный редактор для удобного ввода необходимых данных.
115+- Однако в первый раз появляется диалоговое окно, в котором говорится, что "no resources have been defined"(ресурсы не определены). **Resource** - это все, что может администрироваться инструментами VisualPlanIt, например, сотрудник, зал заседаний, книжная библиотека и т.д. Введите имя ресурса. Если ваша программа будет работать с различными ресурсами, вы можете добавить \[их список в виде\] TVpResourceCombobox, чтобы выбрать ресурс, необходимый для запуска программы. Убедитесь, что вы используете уникальные имена ресурсов, потому что VisualPlanIt будет выдавать исключение дубликата ресурса в противном случае.
116+- При повторном запуске программы в следующий раз вы заметите, что данные больше не видны. Нет причин для беспокойства - данные все еще там, но программа просто не знает, какой ресурс открыть. Введите этот код в событие FormCreate после подключения к хранилищу данных:
117+
118+``` pascal
119+procedure TForm1.FormCreate(Sender: TObject);
120+begin
121+ // Используйте этот код, если имя файла не задано в Object Inspector...
122+ VpXmlDatastore1.FileName := name_of_the_datastore_file;
123+ // ... и хранилище данных не подключено автоматически
124+ VpXmlDatastore1.Connected := true;
125+ // Этот код выбирает первый ресурс (index 0), найденный в хранилище данных
126+ if VpXmlDatastore1.Resources.Count > 0 then
127+ VpXmlDatastore1.Resource := VpXmlDatastore1.Resources.Items[0];
128+end;
129+```
130+
131+#### Категории событий
132+
133+![](/wiki-images/b/b3/Tvplanit_eventeditor.png) Редактор событий используется для ввода или редактирования деталей события. Вы найдете здесь комбинированный список с надписью "Category"(Категория). Элементы комбинированного списка можно использовать для классификации событий, например "Business"(Деловые), "Private"(Личное), "Birthday"(День рождения) и т.д. Однако эти элементы имеют только обобщенные имена, такие как "Category 1", "Category 2" и т.д. Вы можно выбрать более описательные имена, посетив свойство хранилища данных `CategoryColorMap`. Поле "Descriptions"(Описания) определяет текст, который будет отображаться в выпадающем списке. Чтобы иметь возможность различать категории в элементе управления DayView, вы также можете установить здесь цвет фона и растровое изображение.
134+
135+#### Воспроизведение звука события
136+
137+Компоненты планировщика готовы воспроизводить звук в заранее определенное время до наступления события. Для этого необходимо установить флажок "Reminder"(Напоминание) в редакторе событий.
138+
139+Есть несколько способов настроить звук:
140+
141+- Хранилище данных предоставляет свойство `DefaultSound`. Указанный здесь звуковой файл будет воспроизводиться всякий раз, когда происходит событие с установленным флажком "Reminder".
142+- Кроме того, для каждого конкретного события можно выбрать отдельный звуковой файл, щелкнув значок громкоговорителя рядом с интервалом напоминания.
143+
144+В Windows звуки воспроизводятся автоматически без дополнительного кода, потому что там встроены универсальные звуковые утилиты. В Linux, однако, это менее стандартизировано. Но хранилище данных предоставляет событие `OnPlaySound`, где может быть выполнена правильная команда воспроизведения звука. Проект *fulldemo* в папке *examples* содержит модуль, который проверяет звуковые движки, обычно доступные в различных системах; этот модуль представляет собой адаптированную версию **playsound component** от Gordon Bamber в *Lazarus components and code repository* (https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/playsoundpackage/).
145+
146+### Хранилища данных
147+
148+Хранилища данных отвечают за постоянное хранение записей о событиях, задачах и контактах.
149+
150+Предком этой иерархии классов является `TVpCustomDatastore`. Он реализует базовую функциональность и предоставляет фундаментальные абстрактные методы, такие как `LoadEvents`, `LoadTasks`, `LoadContacts`, `PostResources`, `PostEvents`, `PostTasks`, `PostContacts`. Его класс-член `Resources` (type: `TVpResources`) хранит все ресурсы в списке как элементы `TVpResource`. Такой элемент ресурса, в свою очередь, содержит другие списки: `Расписание`, `Задачи` и `Контакты` для всех записей событий, задач и контактов. Доступ к выбранному в данный момент ресурсу можно получить из свойств `Resource` или `ResourceID` хранилища данных (последний представляет собой уникальный числовой идентификатор для идентификации ресурса).
151+
152+`TVpCustomDBDatastore`, унаследованный непосредственно от `TVpCustomDatastore`. Это еще один (псевдо-) абстрактный класс, который обеспечивает базовую функциональность базы данных посредством четырех наборов данных: `ResourceTable`, `EventsTable`, `TasksTable` и `ContactsTable`. Поскольку базы данных имеют очень эффективные методы поиска и фильтрации, эти хранилища данных предоставляют свойство `DayBuffer`, которое определяет диапазон дат до и после текущей выбранной даты, для которой загружаются записи.
153+
154+#### TVpIniDatastore
155+
156+Это простое хранилище файловых данных, которое наследуется от `TVpCustomDatastore`. Он хранит записи данных в простой файловой структуре ini. Имя ini-файла должно быть указано в соответствующем свойстве. Файл загружается после того, как хранилище данных было создано, если свойство времени разработки `AutoConnect` имеет значение `true` или когда свойство среды выполнения `Connected` переключено на значение `true`. Файл сохраняется автоматически, когда `Connected` возвращается к `false` - это происходит до уничтожения хранилища данных.
157+
158+Демонстрационный проект *examples/datastores/ini* является примером того, как можно использовать хранилище данных ini.
159+
160+#### TVpXmlDatastore
161+
162+Это еще один простой файл хранилища данных. Он работает так же, как хранилище данных ini, за исключением того, что этот файл теперь является XML-файлом. Дерево XML-узлов хранилища данных может быть вставлено в любой существующий XML-файл, например, файлы, записанные `TXMLDataStorage`. Для этого необходимо указать узел, к которому будут присоединены узлы хранилища данных (свойство `ParentNode`).
163+
164+Посмотрите демонстрационный проект в *examples/datastores/xml*, чтобы увидеть, как работает хранилище данных xml.
165+
166+#### TVpBufDSDatastore
167+
168+Следующие хранилища данных наследуются от `TVpCustomDBDatastore`. Первая, `TBufDSDataset`, использует простые таблицы `TBufDataset` для хранения данных планировщика. Четыре обязательных файла называются "Resources.db", "Events.db", "Contacts.db" и "Tasks.db" и хранятся в папке, указанной свойством `Directory`. Если `AutoCreate` имеет значение `true`, тогда таблицы создаются автоматически при первом запуске программы; в противном случае должен быть вызван метод хранилища данных `CreateTables`.
169+
170+Применение этого хранилища данных продемонстрировано в *examples/datastores/bufdataset* и в *examples/fulldemo*.
171+
172+#### TVpSqlite3Datastore
173+
174+Это хранилище данных является специализированным хранилищем для таблиц SQLite3. Для этого используются компоненты SQLDB. Вы должны добавить TSQLite3Connection и TSQLTransaction в форму, связать их вместе, используя соответствующие свойства. Свяжите SQLite3Connection с `Connection` хранилища данных. Требуемые SQLQueries создаются автоматически, если `AutoCreate` хранилища данных имеет значение `true` или после вызова `CreateTables`. База данных хранится в файле, указанном `DatabaseName` соединения.
175+
176+Проект в *examples/datastores/sqlite3* демонстрирует, как можно использовать хранилище данных sqlite3.
177+
178+#### TVpFirebirdDatastore
179+
180+База данных Firebird предоставляет хранилище для `TVpFirebirdDatastore`. Опять же, здесь используются компоненты SQLDB. Чтобы установить соединение с базой данных, `TIBConnection` должен быть связан с `Connection` хранилища данных. Он должен предоставить всю информацию для подключения к базе данных, такую как имя базы данных, имя пользователя и пароль. Кроме того, необходим компонент `TSQlTransaction`. База данных должна создаваться средствами, предоставляемыми Firebird, или сторонними инструментами администрирования базы данных. Это можно сделать и из хранилища данных, но это приводит к исключению. Если в хранилище данных `AutoCreate` необходимые таблицы создаются автоматически, когда они не найдены; В качестве альтернативы вызовите `CreateTables` для хранилища данных.
181+
182+Использование хранилища данных показано в *examples/datastores/fb*.
183+
184+#### TVpZeosDatastore
185+
186+![](/wiki-images/6/65/TvPlanit_FieldMapping.png)
187+
188+`TVpZeosDatastore` работает с [[Zeos tutorial|Компонентами базы данных ZEOS]]. Поскольку они отсутствуют в стандартном дистрибутиве Lazarus, \[компонент\] содержится в отдельном пакете *laz_visualplanit_zeos*, который находится в папке *source/addons/zeos* и должен быть установлен после \[установки самого\] *laz_visualplanit*.
189+
190+`TZConnection` требуется для установления соединения с базой данных. Таблицы создаются внутри, либо автоматически, если `AutoCreate` имеет значение `true`, либо вручную, вызывая `CreateTable`.
191+
192+Демонстрационный проект можно найти в *examples/datastores/zeos*.
193+
194+#### TVpFlexDatastore
195+
196+В упомянутых выше хранилищах данных, связанных с базой данных, таблицы создаются хранилищем данных. Это гарантирует, что поля \[будут\] названы так, как ожидается хранилищем данных. С другой стороны, если таблицы уже существуют или предоставляются другими приложениями, весьма вероятно, что имена полей не будут повторно распознаны. `TVpFlexDatastore` может быть решением \[этой проблемы\]. Его название указывает на то, что это очень «гибкое» хранилище данных. В частности, можно связываться с любой системой базы данных, если доступен TDataset-потомок.
197+
198+Вы должны добавить в форму четыре компонента TDataset, каждый из которых соответствует одному из данных Resources, Events, Contacts и Tasks, и связать их с `DataSource` хранилища данных через компоненты TDataSource. Затем дважды щелкните `TvVpFlexDatastore`, чтобы открыть FieldMapper. Это инструмент для назначения полей базы данных внутренним полям хранилища данных. Для каждого поля базы данных, которое вы хотите включить в планировщик, выберите соответствующее поле хранилища данных в правом списке. После нажатия кнопки "Add"(Добавить) пара полей отображается в списке "Field Mappings"(Сопоставление полей).
199+
200+Есть два примера проектов
201+
202+- *examples/datastores/flex/access* демонстрирует, как база данных MS Access может служить для хранения с использованием ODBCConnection и других компонентов SQLDB (есть также readme.txt с пошаговыми инструкциями).
203+- *examples/datastores/flex/sqlite3* повторяет то же самое для базы данных SQLite3.
204+
205+#### Другие хранилища данных
206+
207+Следующие хранилища данных из исходного дистрибутива Delphi включены в папку с исходниками, но не добавлены в пакет, поскольку для них требуется BDE, который недоступен для Lazarus:
208+
209+- **TVpBDEDatastore** для доступа к базе данных с помощью Borland Database Engine (BDE) (модуль *vpbdeds*)
210+- **TVpAdvDatastore** для базы данных Advantage (модуль *vpadvds*)
211+- **TVpFF2Datastore** для баз данных FlashFiler 2 (модуль *vpff2ds*)
212+- **TVpDBISAMDatastore** для доступа к базе данных DBISAM (модуль *vpdbisamds*)
213+- **TVpSQLDatastore** (модуль *vpsqlds*): Это очень общее хранилище данных для любой базы данных sql. Должен быть предоставлен сопряженный класс с потомком TDataset, и должен быть класс, определяющий конкретный SQL-диалект. Для применения в Lazarus потребуется некоторая перестройка свойств, связанных с BDE. Пакет содержит пример доступа к BDE.
214+
215+### Наложение событий
216+
217+Компоненты DayView и WeekView в основном отображают события одного ресурса. Однако возможно переключиться в **overlay mode**(режим наложения), где другие ресурсы могут отображаться в тех же элементах управления. Это может быть достигнуто путем назначения ресурса `TVResourceGroup` (свойство `Group`):
218+
219+``` pascal
220+type
221+ TVpOverlayPattern = (opSolid, opClear, opHorizontal, opVertical, opFDiagonal, opBDiagonal, opCross, opDiagCross);
222+
223+ TVpOverlayDetail = (odResource, odEventDescription, odEventCategory);
224+ TVpOverlayDetails = set of TVpOverlayDetail;
225+
226+ TVpResourceGroup = class
227+ //...
228+ property Caption: String;
229+ property Count: Integer;
230+ property Items[AIndex: Integer]: TVpResource;
231+ property Pattern: TVpOverlayPattern;
232+ property ResourceID: Integer;
233+ property ReadOnly: boolean read FReadOnly;
234+ property ShowDetails: TVpOverlayDetails;
235+ end;
236+
237+procedure TMainForm.CreateResourceGroup;
238+const
239+ NAME_OF_GROUP = ''; // пусто -> используйте взамен описания ресурсов
240+ PARENT_ID = 1;
241+ OVERLAYED_ID = 2;
242+var
243+ datastore: TVpCustomDatastore;
244+ grp: TVpResourceGroup;
245+begin
246+ datastore := VpControlLink1.Datastore;
247+ grp := datastore.Resources.AddResourceGroup([PARENT_ID, OVERLAYED_ID], NAME_OF_GROUP);
248+ grp.ReadOnly := true;
249+ grp.Pattern := opDiagCross;
250+ if datastore.Resource <> nil then
251+ datastore.Resource.Group := grp else
252+ datastore.Resource.Group := nil;
253+ datastore.RefreshEvents; // или: datastore.UpdateGroupEvents;
254+end;
255+```
256+
257+Идентификаторы наложенных ресурсов указываются в виде массива в первом параметре вызова `AddResourceGroup`. Первый идентификатор играет особую роль: он относится к ресурсу, к которому присоединена группа. Если этот ресурс отображается в компоненте DayView или WeekView, то события другого указанного идентификатора(ов) накладываются на один и тот же элемент управления.
258+
259+Уровень детализации, видимый пользователю, просматривающему наложенные события, контролируется свойством `ShowDetails` группы ресурсов. По умолчанию отображается только имя наложенного ресурса. Если необходимо предоставить больше деталей, вы можете добавить другие элементы `TVpOverlayDetails`. Фон наложенных событий в дневном обзоре заштриховывается, как указано в свойстве `Pattern` группы ресурсов, если категория событий не исключена из видимых деталей; в противном случае событие рисуется, как указано в свойстве `HiddenCategories` хранилища данных.
260+
261+Редактирование, удаление, перетаскивание наложенных событий по умолчанию отключено, но это можно разрешить, установив для свойства `ReadOnly` их группы ресурсов значение `false`.
262+
263+Чтобы включить или отключить группы ресурсов, контекстное меню компонентов DayView и WeekView расширено соответствующим подменю. Подменю содержит элемент «none», означающий «нет наложенных событий», а также элемент для каждой группы ресурсов, в которой текущий выбранный ресурс является родительским. Заголовок пунктов меню определяется вторым (необязательным) параметром вызова `AddResourceGroup` (`NAME_OF_GROUP`); если поле пустое, имя группы выводится из описаний наложенных ресурсов.
264+
265+### Печать и предварительный просмотр
266+
267+![](/wiki-images/8/84/Tvplanit_printformatdesigner.png) Пакет VisualPlanIt содержит процедуры для печати элементов управления планировщика. Реализован даже предварительный просмотр печати. Процесс печати определяется с помощью шаблонов, которые здесь называются "print formats"(форматы печати). Они могут быть созданы во время разработки или с помощью XML-файла, загруженного во время выполнения, содержать список компонентов, которые будут напечатаны.
268+
269+Основой поддержки печати является класс `TVpPrinter` - он доступен через свойство `Printer` в `TVpControlLink`. Он содержит дополнительную информацию, необходимую для процесса печати, и содержит список доступных `PrintFormats`.
270+
271+Для быстрого доступа к дизайнеру формата печати дважды щелкните компонент `TVpControlLink`. Нажмите на верхнюю кнопку "New"(Новый), чтобы открыть редактор основного формата. Здесь вы можете назначить осмысленное имя для формата печати. При нажатии на нижнюю кнопку "Edit"(Редактировать) открывается редактор "Element"(Элемент) - это инструмент для определения содержимого в формате печатной печати, аналогичный дизайнеру отчетов, но менее удобный. В дополнение к элементам управления планировщика, DayView, WeekView, MonthView, TaskList и ContactGrid, редактор также позволяет добавлять в формат дополнительные объекты текста и формы. Несколько элементов могут содержаться в одном формате. Расположите элементы, используя спецификации Top/Left/Width/Height справа. Кроме того, всю страницу формата можно поворачивать с шагом 90°.
272+
273+«Предварительный просмотр» может быть создан с помощью компонента `TVpPrintPreview`. Назначьте ControlLink формы для `ControlLink` и `Printer` модуля *Printers* для свойства `Printer` компонента предварительного просмотра. Для правильной работы печати у вас должен быть \[предварительно установлен\] пакет *Printer4Lazarus* в соответствии с требованиями проекта; это проще всего сделать, добавив в форму стандартный `TPrintDialog`, который вам, возможно, понадобится в любом случае. Откройте предварительный просмотр печати, вызвав его метод `Execute`. Следует отметить, что сам предварительный просмотр печати не выдает никаких команд печати. Поэтому должен быть написан дополнительный код печати, если пользователь решит начать распечатку из предварительного просмотра, что-то вроде этого:
274+
275+``` pascal
276+if VpPrintPreviewDialog1.Execute then
277+ if PrintDialog1.Execute then begin
278+ Printer.BeginDoc;
279+ try
280+ VpPrintPreviewDialog1.ControlLink.Printer.Print(
281+ Printer,
282+ VpPrintPreviewDialog1.StartDate,
283+ VpPrintPreviewDialog1.EndDate
284+ );
285+ finally
286+ Printer.EndDoc;
287+ end;
288+ end;
289+```
290+
291+См. проработанный пример в проекте *fulldemo* в папке *examples*.
292+
293+### Локализация
294+
295+Все внутренние строки, используемые пакетом VisualPlanIt, могут быть локализованы с помощью утилит перевода, доступных в Lazarus. **Переведенные po-файлы** можно найти в папке *languages* дистрибутива. Скопируйте их в языковую папку вашего приложения и переведите \[его\], вызвав
296+
297+``` pascal
298+uses
299+ translations;
300+var
301+ langdir: String; // языковая папка вашего приложения
302+ lang: String; // аббревиатура языка, например "de" для немецкого
303+//...
304+ TranslateUnitResourceStrings('vpsr', langdir + 'vpsr.' + lang + 'po');
305+```
306+
307+> **Note:** Пользователям предлагается отправлять \[разработчику\] переводы ресурсов для своего родного языка.
308+
309+Помимо предоставления переведенных строк, должны быть адаптированы различные «свойства, относящиеся к дате/времени» элементов управления планировщика:
310+
311+- Установите для `VpDateView.DateLabelFormat` значение `DefaultFormatSettings.LongDateFormat`, dto. с `VpWeekView.DayHeadAttributes.DateFormat` и `VpWeekView.DateLabelFormat`.
312+- Установите `VpMonthView.DatelabelFormat` в строку `'mmmm yyyy'`, что означает «месяц названием + год».
313+- Установите для `VpTaskView.DisplayOptions.DueDateFormat` значение `DefaultFormatSettings.ShortDateformat`.
314+- Определите `TVpTimeFormat` вашей системы, вызвав `GetTimeFormat` (в модуле *vpmisc*). Результат может быть `tf12Hour` или `tf24Hour` и должен быть назначен свойствам `TimeFormat` VpDayView, VpWeekView и VpMonthView.
315+- Установите свойства `WeekStartsOn` для VpMonthView и VpWeekView в код дня начала недели (1 = воскресенье, ..., 7 = суббота).
316+
317+Наконец, `TVpControlLink` реализует процедуры локализации **адресов** в диалоге редактора контактов. Для этого к пакету VisualPlanIt прилагается файл vplocalize.xml. Он содержит правила для построения адресов в правильном формате, варьирующемся от страны к стране. Если это имя файла назначено свойству `LocalizationFile` элемента ControlLink, то эти правила вступают в силу при создании диалога редактора контактов. Обратите внимание, что этот файл не переводится с помощью файлов po.
318+
319+## Использование панели навигации
320+
321+![](/wiki-images/1/1d/Vpnavbar.png)
322+
323+`TVpNavBar`, показанный справа на этом скриншоте демо *navbar*, представляет собой инструмент навигации, похожий на тот, который известен в Outlook. Он состоит из нескольких **папок**, представленных кнопочными элементами управления, и нескольких **элементов** - это помеченные значки в большом пространстве между двумя кнопками. Кнопка папки, которую можно нарисовать в нескольких стилях, похожих на кнопки или вкладки, всегда отображается над соответствующей областью элемента. Щелчок по папке делит стопку папок на верхнюю и нижнюю части и отображает элементы, назначенные этой папке, между соответствующей папкой вверху и следующей папкой внизу. Индекс развернутой в данный момент папки задается свойством `ActiveFolder`, а индекс выбранных элементов в этой папке задается свойством `ActiveItem`. Событие `OnItemClick` запускается при щелчке элемента, в качестве параметра он имеет индекс выбранного элемента.
324+
325+**Значок** может быть назначен каждому элементу. Эти изображения собраны в списке изображений, назначенном свойству `Images` панели навигации. Изображения обычно должны быть 32x32 пикселей. Свойство `IconSize` каждой папки определяет, будут ли эти изображения отображаться непосредственно как «большие изображения» или уменьшены в 2 раза (16x16 пикселей) как «маленькие изображения». Уменьшение масштаба выполняется компонентом.\
326+![](/wiki-images/1/10/Vpnavbareditor.png) **Заполнить TVpNavBar во время разработки** легко, если версия VisualPlanIt по крайней мере 1.0.10, в которой работает редактор компонентов NavBar. Просто дважды щелкните по компоненту или выберите «Layout Tool ...» в контекстном меню компонента. Откроется редактор компонентов, отображаемый здесь в виде скриншота. Он содержит три списка:
327+
328+- **Левый список** (Folders) показывает **папки**, найденные на панели навигации. Нажмите кнопку «+», чтобы добавить новую папку, «-», чтобы удалить выбранную папку, или стрелки «вверх»/«вниз», чтобы изменить порядок папок. Свойства выбранной папки отображаются в инспекторе объектов:
329+ - Укажите `Caption` папки - это текст, который будет отображаться на кнопке/вкладке папки.
330+ - Оставьте `IconSize` в \[значении\] `isLarge`, если вы хотите использовать большие значки для элементов этой папки. В этом случае значки и подписи к ним будут отцентрированы, подпись будет находиться под значком и переноситься по словам, если текст длиннее, чем ширина панели навигации. Если же вы выберете `isSmall`, значки и подписи будут выровнены по левому краю, и (непереносимые по словам) заголовки будут нарисованы справа от значков. `IconSize` может меняться от папки к папке.
331+ - Не устанавливайте `FolderType` равным `ftContainer` - эта функция для добавления произвольных элементов управления в папку не работает в Lazarus на момент написания этой статьи.
332+- В **центральном списке** (Items/Icons) отображаются **элементы**, назначенные папке, выделенной в левом списке. Заголовок и значок этого элемента отображаются в каждой строке. Снова нажмите кнопки «+», «-» или стрелки «вверх»/«вниз», чтобы добавить, удалить или изменить порядок элементов. И снова свойства выбранного элемента можно изменить в инспекторе объектов. Помимо `Caption`, уже упомянутого для папок, есть также свойство `ImageIndex`, которое указывает значок, отображаемый для элемента. Индекс изображения относится к списку изображений, назначенному свойству `Images` панели NavBar.
333+- **Правый список** (Availabel images) содержит все **изображения**, найденные в ImageList. Он предназначен для упрощения назначения значков элементам: выберите элемент, для которого должен быть выбран значок. Выберите значок в правом списке изображений и нажмите на стрелку между списком элементов и изображений.
334+
335+Если версия VisualPlanIt древнее, чем версия 1.0.10, получение папок и элементов в NavBar будет немного сложнее, поскольку редактор компонентов еще не был перенесен/адаптирован для Lazarus. В этом случае лучше всего изучить эту задачу с помощью инспектора объектов:
336+
337+- Добавьте компонент TVpNavBar в форму.
338+- Добавьте список изображений, в идеале с размерами 32x32, и назначьте его свойству `Images` панели NavBar.
339+- Нажмите кнопку «...» рядом с `FolderCollection`, чтобы открыть редактор коллекций для папок.
340+- Нажмите "Add"(Добавить), чтобы добавить новую папку.
341+- Выберите новую папку в редакторе коллекции, ее свойства появятся в инспекторе объектов и могут быть изменены там.
342+- Чтобы добавить элементы в папку, нажмите `ItemCollection`. Откроется редактор коллекции для элементов, принадлежащих текущей папке.
343+- Снова нажмите "Add"(Добавить), чтобы создать новый элемент, и выберите его в редакторе коллекции, чтобы ввести его свойства в инспекторе объектов.
344+
345+## Гаджеты
346+
347+![](/wiki-images/e/e3/Vpgadgets.png)
348+
349+В дополнение к компонентам планировщика пакет Visual PlanIt содержит также два автономных гаджета:
350+
351+### TVpLEDLabel
352+
353+Это 14-сегментный светодиодный дисплей, который может отображать любую строку ASCII. Строка определяется с помощью свойства `Caption`, но количество светодиодных символов должно быть определено явно с помощью свойства `Columns`
354+
355+### TVpClock
356+
357+Это цифровые или аналоговые часы - в зависимости от свойства `DisplayMode`. Разнообразие настроек можно применять для каждого режима отдельно, используя свойства в `AnalogOptions` и `DigitalOptions`. Свойства в значительной степени говорят сами за себя, за исключением, возможно, `DigitalOptions.MilitaryTime`, который активирует 24-часовое отображение, если `true`, или 12-часовой режим am/pm, если `false`. `AnalogOptions.ClockFace` заменяет нарисованный по умолчанию циферблат часов растровым изображением - см. Скриншот выше.
358+
359+С помощью свойства `ClockMode` работа часов может быть изменена со стандартных часов (`cmClock`) \[на другие\] (секундомер или таймер обратного отсчета, `cmTimer` и `cmCountdownTimer` соответственно).
360+
361+---
362+*From the Free Pascal wiki, page "Turbopower Visual PlanIt/ru", as it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history