Sign in Join
Wiki copytemporary

Turbopower Visual PlanIt/ru: what changed

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

OldNewLine
11## О компоненте
22
33Visual PlanIt - это набор синхронизированных, привязанных к данным, компонентов для добавления в приложения возможностей управления временем, задачами и контактами. Получите Outlook-подобный интерфейс без хлопот.
44
55Этот компонент был разработан для кроссплатформенных приложений.
66
77### Скриншоты
88
99![](/wiki-images/f/fb/Tvplanit.PNG)
1010
1111### Авторы
1212
1313Авторы: Turbo Power Software\
1414Порт на LCL: Christian Ulrich и Werner Pamler
1515
1616### Лицензия
1717
1818[Mozilla Public Licence 1.1](http://opensource.org/licenses/mozilla1.1.php)
1919
2020### Загрузка
2121
2222- Version 1.010: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.0.10.zip/download>
2323- Version 1.08: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.08.zip/download>
2424- Version 1.06: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.06.zip/download>
2525- Version 1.04: <https://sourceforge.net/projects/lazarus-ccr/files/tvplanit/tvplanit-1.04.zip/download>
2626
2727### SVN
2828
2929Вы можете проверить последний исходный код из <https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/tvplanit>
3030
3131Командная строка для этого
3232
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)
33+```text
34+svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/tvplanit
35+```
3436
3537### Сообщения об ошибках / запросы на новые функции
3638
3739Отчеты об ошибках и запросы функций должны быть отправлены в Lazarus/Free Pascal Bug Tracker; уточняйте, пожалуйста, что для проекта "Lazarus-CCR": <http://bugs.freepascal.org/>
3840
3941### Журнал изменений: новые функции
4042
4143- 02.02.2008 - Начальный порт (version 1.03)
4244- 01.08.2016 - (Почти) полный порт (version 1.04)
4345- 28.11.2016 - Перетаскивание, хранилище данных mORMot, новые поля, поддержка праздников, designtime и runtime пакеты (version 1.06)
4446- Май, 2018 - Адаптация к Laz1.8 + поддержка high DPI, хранилища данных json.
4547- 04.05.2018 - Редактор компонентов NavBar (version 1.10)
4648- 21.06.2018 - Новые свойства для VpDayView и VpContactButtons, импорт из файлов vCard и iCal (version 1.2.0)
4749
4850- текущий момент
4951 - (ничего на данный момент)
5052
5153### Несовместимые изменения
5254
5355- Версия 1.0.4 больше не компилируется с Delphi.
5456- Начиная с v1.0.11, события VpDayView `OnDVBeforeDrawEvent` и `OnDVAfterDrawEvent` имеют дополнительный параметр `GutterRect`. Это было сделано для возможности пользовательской отрисовки фона события/канавки.
5557- Начиная с версии 1.0.11, события `OnOwnerEditEvent` из `TVpDayView`/`TVpWeekView`/`TVpMonthView`, `OnOwnerEditContact` из `TVpContactGrid` и `OnOwnerEditTask` из `TVpTaskList` имеют новый параметр `IsNewEvent`, `IsNewContact` и `IsNewTask`, чтобы указать пользовательскому редактору, нужно ли редактировать новое событие/контакт/задачу.
5658
5759### Зависимости / Системные требования
5860
5961- FPC 2.6.4 или новее
6062- Lazarus 1.4.4 или новее
6163- Эти версии были доступны на момент написания этого обновления. Не исключено, что пакет можно использовать и с более старыми версиями.
6264
6365### Установка
6466
6567- Создайте каталог для компонентов, например, *lazarus\components\tvplanit*
6668- В этом каталоге разархивируйте файлы из zip-файла или выполните командную строку svn, описанную ранее.
6769- Откройтеlazarus
6870- В версии 1.04 библиотеки пакеты времени разработки и \[пакеты\] времени выполнения находится сведены в один. Откройте пакет *laz_visualplanit.lpk* из папки *source* с помощью *Package/Open file (-lpk)* и нажмите **Compile**. Нажмите **Use(Использовать) \> Install(Установить)**, если вы хотите установить компоненты в IDE.
6971- Начиная с версии 1.06 библиотека будет разделена на пакеты времени разработки и времени выполнения
7072 - Откройте пакет времени выполнения *laz_visualplanit.lpk* из корневой папки библиотеки с помощью *Package/Open file file (.lpk)* и нажмите **Compile**, чтобы скомпилировать его.
7173 - Откройте пакет времени разработки *laz_visualplanit_design.lpk* из той же папки, нажмите **Use(Использовать) \> Install(Установить)**.
7274- Если вам нужно хранилище данных Zeos, повторите \[манипуляции\] с пакетом *laz_visualplanit_zeos.lpk* (и *laz_visualplanit_zeos_design.lpk*) из папки *source/addons/zeos*. Убедитесь, что [[Zeos tutorial|Zeos компоненты]] установлены.
7375
7476------------------------------------------------------------------------
7577
7678Прим.перев.: не помню, с какой точно версии, но в Lazarus 1.8.4 уже была доступна установка этого компонента посредством Online Package Manager c установкой пакета Zeos при необходимости.
7779
7880------------------------------------------------------------------------
7981
8082### Документация
8183
8284Если вам нужна полная документация пакета VisualPlanIt, получите оригинальный 300-страничный PDF-файл TurboPower с официального сайта SourceForge версии под Delphi (https://sourceforge.net/projects/tpvplanit/files/tpvplanit_docs/).
8385
8486## Использование компонентов планировщика
8587
8688### С чего начать
8789
8890![](/wiki-images/1/16/Tvplanit_tutorial.png)
8991
9092#### Простой проект
9193
9294Вот краткое руководство для ваших первых шагов с компонентами VisualPlanIt.
9395
9496- Создайте новое приложение. Сохраните его в своей папке.
9597- Добавьте TPageControl с тремя вкладками. Назовите их *"Events"(События)*, *"Tasks"(Задачи)*, и *"Contacts"(Контакты)*.
9698- В палитре компонентов найдите вкладку *Visual PlanIt*.
9799- Выберите `TVpDayView` и добавьте его на вкладку *"Events"* PageControl. Это календарь на день, который отображает события (приемы, встречи и т.д.) на весь день с разрешением, определяемым так называемой `Granularity`(зернистостью).
98100 - Если вы привыкли к \[отображению\] времени в 24-часовом формате, переключите `TimeFormat` на `tf24Hours`.
99101 - Если календарь достаточно широкий, вы можете изменить `NumDays` на, скажем, 2, чтобы увидеть два дня одновременно.
100102 - Придайте компонентам более современный вид, установив для `DrawingStyle` значение `dsFlat`.
101103 - Точно так же вы можете добавить `TVpWeekView` (календарь на неделю) и/или `TVpMonthView` (календарь на месяц) на вкладку "Events". Они дают обзор тех же событий, но с меньшим разрешением. Текстовое многоточие ("...") отображается, если текст события не может быть отображен полностью.
102104- Теперь добавьте `TVpTaskList` на вкладку *"Tasks"* в PageControl. Это список дел с указанием сроков. Просроченные задания выделяются красным. Завершенные задачи зачеркиваются. Обратите внимание, что `DisplayOptions.ShowCompleted` или `.ShowAll` необходимо пометить, чтобы видеть выполненные задачи.
103105- Наконец, добавьте `TVpContactGrid` на вкладку *"Contacts"* PageControl.
104106- Опять же, вы можете использовать `DrawingStyle` `dsFlat` для более современного вида.
105107- Поиграйте со свойствами, чтобы настроить все эти визуальные элементы управления в соответствии с вашими предпочтениями. Например, `TVpWeekView` имеет свойство, определяющее, начинается ли неделя в понедельник или воскресенье (`WeekStartsOn`).
106108
107109- Не хватает двух компонентов: **DataStore** и **ControlLink**.
108110 - **Datastore** - это компонент, в котором хранятся данные, отображаемые в визуальных элементах управления. Пакет Visual PlanIt содержит ряд предопределенных хранилищ данных - см.ниже. Мы выбираем здесь TVpIniDatastore или TVpXmlDatastore, которые хранят данные в INI или XML-файле - эти хранилища не требуют базы данных, как другие хранилища данных.
109111 - В свойстве `Filename` введите имя для файла хранилища данных, например, *data.ini* или *data.xml*, соответственно. Использование относительного имени файла здесь означает, что путь будет относительно местоположения exe-файла программы, что удобно для этого урока. Однако в «реальном» приложении абсолютный путь может быть предпочтительным. И также может быть полезно ввести имя файла во время выполнения, например, в обработчике событий FormCreate.
110112 - Если имя файла известно во время разработки, вы можете установить для `AutoConnect` значение `true`, чтобы автоматически открывать хранилище данных при запуске программы. Если имя файла указано во время выполнения, оставьте `AutoConnect` в `false` и установите для свойства `Connected` хранилища данных значение `true`.
111113 - **ControlLink** автоматически устанавливает связь между хранилищем данных и визуальными элементами управления и гарантирует, что элементы управления получают свои данные, если это необходимо, и синхронизируются.
112114
113115- Теперь пришло время запустить программу
114116- Как **добавить данные**? Это делается двойным щелчком по любому из добавленных нами элементов управления, чтобы открыть специальный встроенный редактор для удобного ввода необходимых данных.
115117- Однако в первый раз появляется диалоговое окно, в котором говорится, что "no resources have been defined"(ресурсы не определены). **Resource** - это все, что может администрироваться инструментами VisualPlanIt, например, сотрудник, зал заседаний, книжная библиотека и т.д. Введите имя ресурса. Если ваша программа будет работать с различными ресурсами, вы можете добавить \[их список в виде\] TVpResourceCombobox, чтобы выбрать ресурс, необходимый для запуска программы. Убедитесь, что вы используете уникальные имена ресурсов, потому что VisualPlanIt будет выдавать исключение дубликата ресурса в противном случае.
116118- При повторном запуске программы в следующий раз вы заметите, что данные больше не видны. Нет причин для беспокойства - данные все еще там, но программа просто не знает, какой ресурс открыть. Введите этот код в событие FormCreate после подключения к хранилищу данных:
117119
118120``` pascal
119121procedure TForm1.FormCreate(Sender: TObject);
120122begin
121123 // Используйте этот код, если имя файла не задано в Object Inspector...
122124 VpXmlDatastore1.FileName := name_of_the_datastore_file;
123125 // ... и хранилище данных не подключено автоматически
124126 VpXmlDatastore1.Connected := true;
125127 // Этот код выбирает первый ресурс (index 0), найденный в хранилище данных
126128 if VpXmlDatastore1.Resources.Count > 0 then
127129 VpXmlDatastore1.Resource := VpXmlDatastore1.Resources.Items[0];
128130end;
129131```
130132
131133#### Категории событий
132134
133135![](/wiki-images/b/b3/Tvplanit_eventeditor.png) Редактор событий используется для ввода или редактирования деталей события. Вы найдете здесь комбинированный список с надписью "Category"(Категория). Элементы комбинированного списка можно использовать для классификации событий, например "Business"(Деловые), "Private"(Личное), "Birthday"(День рождения) и т.д. Однако эти элементы имеют только обобщенные имена, такие как "Category 1", "Category 2" и т.д. Вы можно выбрать более описательные имена, посетив свойство хранилища данных `CategoryColorMap`. Поле "Descriptions"(Описания) определяет текст, который будет отображаться в выпадающем списке. Чтобы иметь возможность различать категории в элементе управления DayView, вы также можете установить здесь цвет фона и растровое изображение.
134136
135137#### Воспроизведение звука события
136138
137139Компоненты планировщика готовы воспроизводить звук в заранее определенное время до наступления события. Для этого необходимо установить флажок "Reminder"(Напоминание) в редакторе событий.
138140
139141Есть несколько способов настроить звук:
140142
141143- Хранилище данных предоставляет свойство `DefaultSound`. Указанный здесь звуковой файл будет воспроизводиться всякий раз, когда происходит событие с установленным флажком "Reminder".
142144- Кроме того, для каждого конкретного события можно выбрать отдельный звуковой файл, щелкнув значок громкоговорителя рядом с интервалом напоминания.
143145
144146В 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/).
145147
146148### Хранилища данных
147149
148150Хранилища данных отвечают за постоянное хранение записей о событиях, задачах и контактах.
149151
150152Предком этой иерархии классов является `TVpCustomDatastore`. Он реализует базовую функциональность и предоставляет фундаментальные абстрактные методы, такие как `LoadEvents`, `LoadTasks`, `LoadContacts`, `PostResources`, `PostEvents`, `PostTasks`, `PostContacts`. Его класс-член `Resources` (type: `TVpResources`) хранит все ресурсы в списке как элементы `TVpResource`. Такой элемент ресурса, в свою очередь, содержит другие списки: `Расписание`, `Задачи` и `Контакты` для всех записей событий, задач и контактов. Доступ к выбранному в данный момент ресурсу можно получить из свойств `Resource` или `ResourceID` хранилища данных (последний представляет собой уникальный числовой идентификатор для идентификации ресурса).
151153
152154`TVpCustomDBDatastore`, унаследованный непосредственно от `TVpCustomDatastore`. Это еще один (псевдо-) абстрактный класс, который обеспечивает базовую функциональность базы данных посредством четырех наборов данных: `ResourceTable`, `EventsTable`, `TasksTable` и `ContactsTable`. Поскольку базы данных имеют очень эффективные методы поиска и фильтрации, эти хранилища данных предоставляют свойство `DayBuffer`, которое определяет диапазон дат до и после текущей выбранной даты, для которой загружаются записи.
153155
154156#### TVpIniDatastore
155157
156158Это простое хранилище файловых данных, которое наследуется от `TVpCustomDatastore`. Он хранит записи данных в простой файловой структуре ini. Имя ini-файла должно быть указано в соответствующем свойстве. Файл загружается после того, как хранилище данных было создано, если свойство времени разработки `AutoConnect` имеет значение `true` или когда свойство среды выполнения `Connected` переключено на значение `true`. Файл сохраняется автоматически, когда `Connected` возвращается к `false` - это происходит до уничтожения хранилища данных.
157159
158160Демонстрационный проект *examples/datastores/ini* является примером того, как можно использовать хранилище данных ini.
159161
160162#### TVpXmlDatastore
161163
162164Это еще один простой файл хранилища данных. Он работает так же, как хранилище данных ini, за исключением того, что этот файл теперь является XML-файлом. Дерево XML-узлов хранилища данных может быть вставлено в любой существующий XML-файл, например, файлы, записанные `TXMLDataStorage`. Для этого необходимо указать узел, к которому будут присоединены узлы хранилища данных (свойство `ParentNode`).
163165
164166Посмотрите демонстрационный проект в *examples/datastores/xml*, чтобы увидеть, как работает хранилище данных xml.
165167
166168#### TVpBufDSDatastore
167169
168170Следующие хранилища данных наследуются от `TVpCustomDBDatastore`. Первая, `TBufDSDataset`, использует простые таблицы `TBufDataset` для хранения данных планировщика. Четыре обязательных файла называются "Resources.db", "Events.db", "Contacts.db" и "Tasks.db" и хранятся в папке, указанной свойством `Directory`. Если `AutoCreate` имеет значение `true`, тогда таблицы создаются автоматически при первом запуске программы; в противном случае должен быть вызван метод хранилища данных `CreateTables`.
169171
170172Применение этого хранилища данных продемонстрировано в *examples/datastores/bufdataset* и в *examples/fulldemo*.
171173
172174#### TVpSqlite3Datastore
173175
174176Это хранилище данных является специализированным хранилищем для таблиц SQLite3. Для этого используются компоненты SQLDB. Вы должны добавить TSQLite3Connection и TSQLTransaction в форму, связать их вместе, используя соответствующие свойства. Свяжите SQLite3Connection с `Connection` хранилища данных. Требуемые SQLQueries создаются автоматически, если `AutoCreate` хранилища данных имеет значение `true` или после вызова `CreateTables`. База данных хранится в файле, указанном `DatabaseName` соединения.
175177
176178Проект в *examples/datastores/sqlite3* демонстрирует, как можно использовать хранилище данных sqlite3.
177179
178180#### TVpFirebirdDatastore
179181
180182База данных Firebird предоставляет хранилище для `TVpFirebirdDatastore`. Опять же, здесь используются компоненты SQLDB. Чтобы установить соединение с базой данных, `TIBConnection` должен быть связан с `Connection` хранилища данных. Он должен предоставить всю информацию для подключения к базе данных, такую как имя базы данных, имя пользователя и пароль. Кроме того, необходим компонент `TSQlTransaction`. База данных должна создаваться средствами, предоставляемыми Firebird, или сторонними инструментами администрирования базы данных. Это можно сделать и из хранилища данных, но это приводит к исключению. Если в хранилище данных `AutoCreate` необходимые таблицы создаются автоматически, когда они не найдены; В качестве альтернативы вызовите `CreateTables` для хранилища данных.
181183
182184Использование хранилища данных показано в *examples/datastores/fb*.
183185
184186#### TVpZeosDatastore
185187
186188![](/wiki-images/6/65/TvPlanit_FieldMapping.png)
187189
188190`TVpZeosDatastore` работает с [[Zeos tutorial|Компонентами базы данных ZEOS]]. Поскольку они отсутствуют в стандартном дистрибутиве Lazarus, \[компонент\] содержится в отдельном пакете *laz_visualplanit_zeos*, который находится в папке *source/addons/zeos* и должен быть установлен после \[установки самого\] *laz_visualplanit*.
189191
190192`TZConnection` требуется для установления соединения с базой данных. Таблицы создаются внутри, либо автоматически, если `AutoCreate` имеет значение `true`, либо вручную, вызывая `CreateTable`.
191193
192194Демонстрационный проект можно найти в *examples/datastores/zeos*.
193195
194196#### TVpFlexDatastore
195197
196198В упомянутых выше хранилищах данных, связанных с базой данных, таблицы создаются хранилищем данных. Это гарантирует, что поля \[будут\] названы так, как ожидается хранилищем данных. С другой стороны, если таблицы уже существуют или предоставляются другими приложениями, весьма вероятно, что имена полей не будут повторно распознаны. `TVpFlexDatastore` может быть решением \[этой проблемы\]. Его название указывает на то, что это очень «гибкое» хранилище данных. В частности, можно связываться с любой системой базы данных, если доступен TDataset-потомок.
197199
198200Вы должны добавить в форму четыре компонента TDataset, каждый из которых соответствует одному из данных Resources, Events, Contacts и Tasks, и связать их с `DataSource` хранилища данных через компоненты TDataSource. Затем дважды щелкните `TvVpFlexDatastore`, чтобы открыть FieldMapper. Это инструмент для назначения полей базы данных внутренним полям хранилища данных. Для каждого поля базы данных, которое вы хотите включить в планировщик, выберите соответствующее поле хранилища данных в правом списке. После нажатия кнопки "Add"(Добавить) пара полей отображается в списке "Field Mappings"(Сопоставление полей).
199201
200202Есть два примера проектов
201203
202204- *examples/datastores/flex/access* демонстрирует, как база данных MS Access может служить для хранения с использованием ODBCConnection и других компонентов SQLDB (есть также readme.txt с пошаговыми инструкциями).
203205- *examples/datastores/flex/sqlite3* повторяет то же самое для базы данных SQLite3.
204206
205207#### Другие хранилища данных
206208
207209Следующие хранилища данных из исходного дистрибутива Delphi включены в папку с исходниками, но не добавлены в пакет, поскольку для них требуется BDE, который недоступен для Lazarus:
208210
209211- **TVpBDEDatastore** для доступа к базе данных с помощью Borland Database Engine (BDE) (модуль *vpbdeds*)
210212- **TVpAdvDatastore** для базы данных Advantage (модуль *vpadvds*)
211213- **TVpFF2Datastore** для баз данных FlashFiler 2 (модуль *vpff2ds*)
212214- **TVpDBISAMDatastore** для доступа к базе данных DBISAM (модуль *vpdbisamds*)
213215- **TVpSQLDatastore** (модуль *vpsqlds*): Это очень общее хранилище данных для любой базы данных sql. Должен быть предоставлен сопряженный класс с потомком TDataset, и должен быть класс, определяющий конкретный SQL-диалект. Для применения в Lazarus потребуется некоторая перестройка свойств, связанных с BDE. Пакет содержит пример доступа к BDE.
214216
215217### Наложение событий
216218
217219Компоненты DayView и WeekView в основном отображают события одного ресурса. Однако возможно переключиться в **overlay mode**(режим наложения), где другие ресурсы могут отображаться в тех же элементах управления. Это может быть достигнуто путем назначения ресурса `TVResourceGroup` (свойство `Group`):
218220
219221``` pascal
220222type
221223 TVpOverlayPattern = (opSolid, opClear, opHorizontal, opVertical, opFDiagonal, opBDiagonal, opCross, opDiagCross);
222224
223225 TVpOverlayDetail = (odResource, odEventDescription, odEventCategory);
224226 TVpOverlayDetails = set of TVpOverlayDetail;
225227
226228 TVpResourceGroup = class
227229 //...
228230 property Caption: String;
229231 property Count: Integer;
230232 property Items[AIndex: Integer]: TVpResource;
231233 property Pattern: TVpOverlayPattern;
232234 property ResourceID: Integer;
233235 property ReadOnly: boolean read FReadOnly;
234236 property ShowDetails: TVpOverlayDetails;
235237 end;
236238
237239procedure TMainForm.CreateResourceGroup;
238240const
239241 NAME_OF_GROUP = ''; // пусто -> используйте взамен описания ресурсов
240242 PARENT_ID = 1;
241243 OVERLAYED_ID = 2;
242244var
243245 datastore: TVpCustomDatastore;
244246 grp: TVpResourceGroup;
245247begin
246248 datastore := VpControlLink1.Datastore;
247249 grp := datastore.Resources.AddResourceGroup([PARENT_ID, OVERLAYED_ID], NAME_OF_GROUP);
248250 grp.ReadOnly := true;
249251 grp.Pattern := opDiagCross;
250252 if datastore.Resource <> nil then
251253 datastore.Resource.Group := grp else
252254 datastore.Resource.Group := nil;
253255 datastore.RefreshEvents; // или: datastore.UpdateGroupEvents;
254256end;
255257```
256258
257259Идентификаторы наложенных ресурсов указываются в виде массива в первом параметре вызова `AddResourceGroup`. Первый идентификатор играет особую роль: он относится к ресурсу, к которому присоединена группа. Если этот ресурс отображается в компоненте DayView или WeekView, то события другого указанного идентификатора(ов) накладываются на один и тот же элемент управления.
258260
259261Уровень детализации, видимый пользователю, просматривающему наложенные события, контролируется свойством `ShowDetails` группы ресурсов. По умолчанию отображается только имя наложенного ресурса. Если необходимо предоставить больше деталей, вы можете добавить другие элементы `TVpOverlayDetails`. Фон наложенных событий в дневном обзоре заштриховывается, как указано в свойстве `Pattern` группы ресурсов, если категория событий не исключена из видимых деталей; в противном случае событие рисуется, как указано в свойстве `HiddenCategories` хранилища данных.
260262
261263Редактирование, удаление, перетаскивание наложенных событий по умолчанию отключено, но это можно разрешить, установив для свойства `ReadOnly` их группы ресурсов значение `false`.
262264
263265Чтобы включить или отключить группы ресурсов, контекстное меню компонентов DayView и WeekView расширено соответствующим подменю. Подменю содержит элемент «none», означающий «нет наложенных событий», а также элемент для каждой группы ресурсов, в которой текущий выбранный ресурс является родительским. Заголовок пунктов меню определяется вторым (необязательным) параметром вызова `AddResourceGroup` (`NAME_OF_GROUP`); если поле пустое, имя группы выводится из описаний наложенных ресурсов.
264266
265267### Печать и предварительный просмотр
266268
267269![](/wiki-images/8/84/Tvplanit_printformatdesigner.png) Пакет VisualPlanIt содержит процедуры для печати элементов управления планировщика. Реализован даже предварительный просмотр печати. Процесс печати определяется с помощью шаблонов, которые здесь называются "print formats"(форматы печати). Они могут быть созданы во время разработки или с помощью XML-файла, загруженного во время выполнения, содержать список компонентов, которые будут напечатаны.
268270
269271Основой поддержки печати является класс `TVpPrinter` - он доступен через свойство `Printer` в `TVpControlLink`. Он содержит дополнительную информацию, необходимую для процесса печати, и содержит список доступных `PrintFormats`.
270272
271273Для быстрого доступа к дизайнеру формата печати дважды щелкните компонент `TVpControlLink`. Нажмите на верхнюю кнопку "New"(Новый), чтобы открыть редактор основного формата. Здесь вы можете назначить осмысленное имя для формата печати. При нажатии на нижнюю кнопку "Edit"(Редактировать) открывается редактор "Element"(Элемент) - это инструмент для определения содержимого в формате печатной печати, аналогичный дизайнеру отчетов, но менее удобный. В дополнение к элементам управления планировщика, DayView, WeekView, MonthView, TaskList и ContactGrid, редактор также позволяет добавлять в формат дополнительные объекты текста и формы. Несколько элементов могут содержаться в одном формате. Расположите элементы, используя спецификации Top/Left/Width/Height справа. Кроме того, всю страницу формата можно поворачивать с шагом 90°.
272274
273275«Предварительный просмотр» может быть создан с помощью компонента `TVpPrintPreview`. Назначьте ControlLink формы для `ControlLink` и `Printer` модуля *Printers* для свойства `Printer` компонента предварительного просмотра. Для правильной работы печати у вас должен быть \[предварительно установлен\] пакет *Printer4Lazarus* в соответствии с требованиями проекта; это проще всего сделать, добавив в форму стандартный `TPrintDialog`, который вам, возможно, понадобится в любом случае. Откройте предварительный просмотр печати, вызвав его метод `Execute`. Следует отметить, что сам предварительный просмотр печати не выдает никаких команд печати. Поэтому должен быть написан дополнительный код печати, если пользователь решит начать распечатку из предварительного просмотра, что-то вроде этого:
274276
275277``` pascal
276278if VpPrintPreviewDialog1.Execute then
277279 if PrintDialog1.Execute then begin
278280 Printer.BeginDoc;
279281 try
280282 VpPrintPreviewDialog1.ControlLink.Printer.Print(
281283 Printer,
282284 VpPrintPreviewDialog1.StartDate,
283285 VpPrintPreviewDialog1.EndDate
284286 );
285287 finally
286288 Printer.EndDoc;
287289 end;
288290 end;
289291```
290292
291293См. проработанный пример в проекте *fulldemo* в папке *examples*.
292294
293295### Локализация
294296
295297Все внутренние строки, используемые пакетом VisualPlanIt, могут быть локализованы с помощью утилит перевода, доступных в Lazarus. **Переведенные po-файлы** можно найти в папке *languages* дистрибутива. Скопируйте их в языковую папку вашего приложения и переведите \[его\], вызвав
296298
297299``` pascal
298300uses
299301 translations;
300302var
301303 langdir: String; // языковая папка вашего приложения
302304 lang: String; // аббревиатура языка, например "de" для немецкого
303305//...
304306 TranslateUnitResourceStrings('vpsr', langdir + 'vpsr.' + lang + 'po');
305307```
306308
307309> **Note:** Пользователям предлагается отправлять \[разработчику\] переводы ресурсов для своего родного языка.
308310
309311Помимо предоставления переведенных строк, должны быть адаптированы различные «свойства, относящиеся к дате/времени» элементов управления планировщика:
310312
311313- Установите для `VpDateView.DateLabelFormat` значение `DefaultFormatSettings.LongDateFormat`, dto. с `VpWeekView.DayHeadAttributes.DateFormat` и `VpWeekView.DateLabelFormat`.
312314- Установите `VpMonthView.DatelabelFormat` в строку `'mmmm yyyy'`, что означает «месяц названием + год».
313315- Установите для `VpTaskView.DisplayOptions.DueDateFormat` значение `DefaultFormatSettings.ShortDateformat`.
314316- Определите `TVpTimeFormat` вашей системы, вызвав `GetTimeFormat` (в модуле *vpmisc*). Результат может быть `tf12Hour` или `tf24Hour` и должен быть назначен свойствам `TimeFormat` VpDayView, VpWeekView и VpMonthView.
315317- Установите свойства `WeekStartsOn` для VpMonthView и VpWeekView в код дня начала недели (1 = воскресенье, ..., 7 = суббота).
316318
317319Наконец, `TVpControlLink` реализует процедуры локализации **адресов** в диалоге редактора контактов. Для этого к пакету VisualPlanIt прилагается файл vplocalize.xml. Он содержит правила для построения адресов в правильном формате, варьирующемся от страны к стране. Если это имя файла назначено свойству `LocalizationFile` элемента ControlLink, то эти правила вступают в силу при создании диалога редактора контактов. Обратите внимание, что этот файл не переводится с помощью файлов po.
318320
319321## Использование панели навигации
320322
321323![](/wiki-images/1/1d/Vpnavbar.png)
322324
323325`TVpNavBar`, показанный справа на этом скриншоте демо *navbar*, представляет собой инструмент навигации, похожий на тот, который известен в Outlook. Он состоит из нескольких **папок**, представленных кнопочными элементами управления, и нескольких **элементов** - это помеченные значки в большом пространстве между двумя кнопками. Кнопка папки, которую можно нарисовать в нескольких стилях, похожих на кнопки или вкладки, всегда отображается над соответствующей областью элемента. Щелчок по папке делит стопку папок на верхнюю и нижнюю части и отображает элементы, назначенные этой папке, между соответствующей папкой вверху и следующей папкой внизу. Индекс развернутой в данный момент папки задается свойством `ActiveFolder`, а индекс выбранных элементов в этой папке задается свойством `ActiveItem`. Событие `OnItemClick` запускается при щелчке элемента, в качестве параметра он имеет индекс выбранного элемента.
324326
325327**Значок** может быть назначен каждому элементу. Эти изображения собраны в списке изображений, назначенном свойству `Images` панели навигации. Изображения обычно должны быть 32x32 пикселей. Свойство `IconSize` каждой папки определяет, будут ли эти изображения отображаться непосредственно как «большие изображения» или уменьшены в 2 раза (16x16 пикселей) как «маленькие изображения». Уменьшение масштаба выполняется компонентом.\
326328![](/wiki-images/1/10/Vpnavbareditor.png) **Заполнить TVpNavBar во время разработки** легко, если версия VisualPlanIt по крайней мере 1.0.10, в которой работает редактор компонентов NavBar. Просто дважды щелкните по компоненту или выберите «Layout Tool ...» в контекстном меню компонента. Откроется редактор компонентов, отображаемый здесь в виде скриншота. Он содержит три списка:
327329
328330- **Левый список** (Folders) показывает **папки**, найденные на панели навигации. Нажмите кнопку «+», чтобы добавить новую папку, «-», чтобы удалить выбранную папку, или стрелки «вверх»/«вниз», чтобы изменить порядок папок. Свойства выбранной папки отображаются в инспекторе объектов:
329331 - Укажите `Caption` папки - это текст, который будет отображаться на кнопке/вкладке папки.
330332 - Оставьте `IconSize` в \[значении\] `isLarge`, если вы хотите использовать большие значки для элементов этой папки. В этом случае значки и подписи к ним будут отцентрированы, подпись будет находиться под значком и переноситься по словам, если текст длиннее, чем ширина панели навигации. Если же вы выберете `isSmall`, значки и подписи будут выровнены по левому краю, и (непереносимые по словам) заголовки будут нарисованы справа от значков. `IconSize` может меняться от папки к папке.
331333 - Не устанавливайте `FolderType` равным `ftContainer` - эта функция для добавления произвольных элементов управления в папку не работает в Lazarus на момент написания этой статьи.
332334- В **центральном списке** (Items/Icons) отображаются **элементы**, назначенные папке, выделенной в левом списке. Заголовок и значок этого элемента отображаются в каждой строке. Снова нажмите кнопки «+», «-» или стрелки «вверх»/«вниз», чтобы добавить, удалить или изменить порядок элементов. И снова свойства выбранного элемента можно изменить в инспекторе объектов. Помимо `Caption`, уже упомянутого для папок, есть также свойство `ImageIndex`, которое указывает значок, отображаемый для элемента. Индекс изображения относится к списку изображений, назначенному свойству `Images` панели NavBar.
333335- **Правый список** (Availabel images) содержит все **изображения**, найденные в ImageList. Он предназначен для упрощения назначения значков элементам: выберите элемент, для которого должен быть выбран значок. Выберите значок в правом списке изображений и нажмите на стрелку между списком элементов и изображений.
334336
335337Если версия VisualPlanIt древнее, чем версия 1.0.10, получение папок и элементов в NavBar будет немного сложнее, поскольку редактор компонентов еще не был перенесен/адаптирован для Lazarus. В этом случае лучше всего изучить эту задачу с помощью инспектора объектов:
336338
337339- Добавьте компонент TVpNavBar в форму.
338340- Добавьте список изображений, в идеале с размерами 32x32, и назначьте его свойству `Images` панели NavBar.
339341- Нажмите кнопку «...» рядом с `FolderCollection`, чтобы открыть редактор коллекций для папок.
340342- Нажмите "Add"(Добавить), чтобы добавить новую папку.
341343- Выберите новую папку в редакторе коллекции, ее свойства появятся в инспекторе объектов и могут быть изменены там.
342344- Чтобы добавить элементы в папку, нажмите `ItemCollection`. Откроется редактор коллекции для элементов, принадлежащих текущей папке.
343345- Снова нажмите "Add"(Добавить), чтобы создать новый элемент, и выберите его в редакторе коллекции, чтобы ввести его свойства в инспекторе объектов.
344346
345347## Гаджеты
346348
347349![](/wiki-images/e/e3/Vpgadgets.png)
348350
349351В дополнение к компонентам планировщика пакет Visual PlanIt содержит также два автономных гаджета:
350352
351353### TVpLEDLabel
352354
353355Это 14-сегментный светодиодный дисплей, который может отображать любую строку ASCII. Строка определяется с помощью свойства `Caption`, но количество светодиодных символов должно быть определено явно с помощью свойства `Columns`
354356
355357### TVpClock
356358
357359Это цифровые или аналоговые часы - в зависимости от свойства `DisplayMode`. Разнообразие настроек можно применять для каждого режима отдельно, используя свойства в `AnalogOptions` и `DigitalOptions`. Свойства в значительной степени говорят сами за себя, за исключением, возможно, `DigitalOptions.MilitaryTime`, который активирует 24-часовое отображение, если `true`, или 12-часовой режим am/pm, если `false`. `AnalogOptions.ClockFace` заменяет нарисованный по умолчанию циферблат часов растровым изображением - см. Скриншот выше.
358360
359361С помощью свойства `ClockMode` работа часов может быть изменена со стандартных часов (`cmClock`) \[на другие\] (секундомер или таймер обратного отсчета, `cmTimer` и `cmCountdownTimer` соответственно).
360362
361363---
362364*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