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